# ArkCompilerå系统Changelog ## cl.arkcompiler.1 ArkTS Sendable&共享模å—è¯æ³•è§„则编译检查完善 **访问级别** 其他 **å˜æ›´åŽŸå› ** Sendable对象需è¦éµå¾ª[使用规则](../../..//application-dev/arkts-utils/arkts-sendable.md#sendable使用规则),共享模å—需è¦éµå¾ª[使用规则](../../..//application-dev/arkts-utils/arkts-sendable-module.md#ä½¿ç”¨è§„æ ¼),在Sendable&共享模å—的部分需è¦çº¦æŸçš„export场景ä¸ï¼Œç¼–译器缺少检查,导致这些场景会å‘生è¿è¡Œæ—¶å¼‚常但是没有编译时错误。在本次版本更新ä¸ï¼Œä¿®å¤äº†è¿™äº›çº¦æŸçš„编译时检查,将è¿è¡Œæ—¶å¼‚常æå‰åˆ°ç¼–译时。旨在通过编译时错误或è¦å‘Šï¼Œå¸®åŠ©å¼€å‘者更早å‘现Sendable&共享模å—使用约æŸï¼Œå‡å°‘è¿è¡Œæ—¶å®šä½æˆæœ¬ã€‚ **å˜æ›´å½±å“** æ¤å˜æ›´ä¸ºå…¼å®¹æ€§å˜æ›´ã€‚ å˜æ›´å‰ï¼š 1. 当在共享模å—ä¸ä½¿ç”¨`export default someVariable`æ–¹å¼å¯¼å‡ºï¼Œå¹¶ä¸”`someVariable`是Non-sendable类型时,DevEco编辑界é¢æœ‰é”™è¯¯æ示,编译没有错误,程åºè¿è¡Œæ—¶ä¼šå´©æºƒã€‚ 2. 当在共享模å—ä¸ä½¿ç”¨`export type someType = someNonSendableType`æ–¹å¼å¯¼å‡ºNon-sendable类型的别å时,DevEco编辑界é¢æ²¡æœ‰æ示,编译没有异常。 3. 当sendable class内部使用当å‰æ¨¡å—top levelä¸`export`çš„sendable class对象时,DevEco编辑界é¢æ²¡æœ‰æ示,编译没有异常,è¿è¡Œæ—¶ä¼šè§¦å‘异常。 å˜æ›´åŽï¼š 1. 当在共享模å—ä¸ä½¿ç”¨`export default someVariable`æ–¹å¼å¯¼å‡ºï¼Œå¹¶ä¸”`someVariable`是Non-sendable类型时,DevEco编辑界é¢æœ‰é”™è¯¯æ示,编译有错误。 2. 当在共享模å—ä¸ä½¿ç”¨`export type someType = someNonSendableType`æ–¹å¼å¯¼å‡ºNon-sendable类型的别å时,DevEco编辑界é¢æœ‰è¦å‘Šæ示,编译有è¦å‘Šã€‚ 3. 当sendable class内部使用当å‰æ¨¡å—top levelä¸`export`çš„sendable class对象时,DevEco编辑界é¢æœ‰è¦å‘Šæ示,编译有è¦å‘Šã€‚ 具体场景示例: 共享模å—exportçº¦æŸ åœºæ™¯ä¸€ï¼šåœ¨å…±äº«æ¨¡å—ä¸ä½¿ç”¨`export default someVariable`æ–¹å¼å¯¼å‡ºï¼Œå¹¶ä¸”`someVariable`是Non-sendable类型时。影å“:兼容å˜æ›´ï¼Œè¿è¡Œæ—¶å´©æºƒå˜æ›´ä¸ºç¼–译报错 å˜æ›´å‰ ```ts 'use shared'; class NonSendableClass {}; export default NonSendableClass; // å¼•å‘ GC 时崩溃 ``` å˜æ›´åŽ ```ts 'use shared'; class NonSendableClass {}; export default NonSendableClass; // 编译错误 ``` 场景二:在共享模å—ä¸ä½¿ç”¨`export type someType = someNonSendableType`æ–¹å¼å¯¼å‡ºNon-sendable的别å时。影å“:兼容å˜æ›´ï¼Œæ— æ示å˜æ›´ä¸ºç¼–辑è¦å‘Šã€ç¼–译è¦å‘Š å˜æ›´å‰ ```ts 'use shared'; class NonSendableClass {}; export type NonSendableAlias = NonSendableClass; ``` å˜æ›´åŽ ```ts 'use shared'; class NonSendableClass {}; export type NonSendableAlias = NonSendableClass; // DevEco编辑界é¢è¦å‘Šæ示 & 编译è¦å‘Š ``` sendable class内部的å˜é‡ä½¿ç”¨çº¦æŸ 场景一:当sendable class内部使用当å‰æ¨¡å—top levelä¸`export`çš„sendable class对象时。影å“:兼容å˜æ›´ï¼Œè¿è¡Œæ—¶å¼‚常å˜æ›´ä¸ºç¼–辑ã€ç¼–译è¦å‘Š å˜æ›´å‰ ```ts import { taskpool } from '@kit.ArkTS'; @Sendable export class SendableData {}; @Sendable class SendableClass { handle():void { new SendableData(); // è¿è¡Œæ—¶å¼‚常 } } @Concurrent async function taskHandle(sendable: SendableClass) { sendable.handle(); } taskpool.execute(new taskpool.Task(taskHandle, new SendableClass())); ``` å˜æ›´åŽ ```ts import { taskpool } from '@kit.ArkTS'; @Sendable export class SendableData {}; @Sendable class SendableClass { handle():void { new SendableData(); // DevEco编辑界é¢è¦å‘Šæ示 & 编译è¦å‘Š } } @Concurrent async function taskHandle(sendable: SendableClass) { sendable.handle(); } taskpool.execute(new taskpool.Task(taskHandle, new SendableClass())); ``` **起始 API Level** ArkTS Sendableè¯æ³•æ£€æŸ¥ä»ŽAPI 12èµ·å¯ç”¨ã€‚ **å˜æ›´å‘生版本** 从OpenHarmony SDK 5.0.0.36 开始。 **å˜æ›´çš„接å£/组件** ä¸æ¶‰åŠã€‚ **适é…指导** 对于开å‘者,建议按照Sendable&共享模å—è§„æ ¼ä¿®å¤æ–°å¢žè¦å‘Šï¼Œé˜²æ¢å‡ºçŽ°è¿è¡Œæ—¶å¼‚常。