M 不是新语言,是 E 的 MCU 受限档位(E 已实现白名单 ∪ E 的 Non-Goal 继承 ∪ M 档附加约束 c1-c5 三集合)。
| 能力 | 状态 | 说明 |
|---|---|---|
| u8~u64/i8~i64 定宽 | 可用 1.6.5+ | uint64_t 映射,8字节大数 golden |
| 可调用性检查 | 可用 1.6.5+ | 非函数被调用=编译期报错 |
| Region 引用 ref T | 设计目标·未实现(0923实测:ref T 语法层拒绝,v1.3卡01.03.07) | 引用不可返回+非引用解引用=编译错 |
| [T;N] 定长数组 | 可用 1.6.5+ | MCU 缓冲区载体 |
| struct / enum / table | Non-Goal | 0918定版(design.html §六·五): C风格结构体布局不做, 数据布局走Region句柄/宿主边界; elangc 1.6.14起struct明确报错 |
| i16/i32 算术 | 可用(elangc 1.6.9 实测) | MOS侧真机验证: i16定宽/负数可由运算产生/0-n写法可用,帧协议六轴+温度全 i16 已进帧流(0922更新) |
| f32 浮点 | 待裁决 | Non-Goal 候选 |
| 堆分配/裸指针/无界循环 | 禁止(门禁c1/c3为规划中·未生效;0923实测 while(1) 可编译,见17.07) | 门禁 c1/c3 |
| 约束 | 错误码 | 负向用例 |
|---|---|---|
| c1 禁堆分配 | E_MCU_HEAP | new/动态数组→编译失败 |
| c2 中断外调须标记 | E_MCU_ISR_CALL | 未标记被ISR调用→编译失败 |
| c3 循环上界可证 | E_MCU_LOOP_BOUND | 无界循环→编译失败 |
| c4 寄存器边界可证 | E_MCU_REG_BOUND | Offset+Width>Size→编译失败 |
| c5 无隐式收窄 | E_MCU_NARROW | u32→u16 无显式截断→编译失败 |
寄存器访问:ReadRegisterN / WriteRegisterN + Offset+Width ≤ Region.Size(照抄 E 官方替代路径)
状态声明(0919 更正):上表 E_MCU_* 五项门禁为规划中特性,当前编译器(elangc 1.6.13)尚未实现,负向用例当前不会被拦截。此前矩阵未标注状态导致误读为已生效,抱歉。实现排期见工单 #229/#258。
[VERIFIED·1.6.5] u64 定宽打包端到端(8字节大数 72623859790382856 golden)
[已验证 2026-09-22] CRC-32/ISO-HDLC 公开测向量——MOS侧双锚点验证,实机 315 帧由主机侧 Python zlib 独立复算 315/315 通过(原待位运算具名函数的排期已由 MOS 侧 frame_pack 合规实现落地)
M 档随 elangc 主版本演进,不单独发版;能力矩阵与 5022 版本登记同源。
注(0919):本矩阵部分条目正按外部复现件逐条复验中(见工单 #229),复验期间"可用"标注以 5022 版本登记实测为准,勿作承诺性依据。