| Crates.io | cml-rust |
| lib.rs | cml-rust |
| version | 0.9.0 |
| created_at | 2026-01-24 11:59:41.949385+00 |
| updated_at | 2026-01-24 11:59:41.949385+00 |
| description | CML (Context Mark Language) 核心语法编解码的 Rust 实现 |
| homepage | https://doc-war.com/CML |
| repository | https://github.com/ContextMark/cml-rust |
| max_upload_size | |
| id | 2066565 |
| size | 52,010 |
上下文标记语言CML(Context Mark Language)的核心语法编解码的 Rust 实现。
use cml_rust::{new, CMLDouble};
fn main() -> Result<(), Box<dyn std::error::Error>> {
let c_double = new(vec![
"万有引力".to_string(),
":".to_string(),
"牛顿".to_string(),
"+".to_string(),
"自然哲学的数学原理".to_string(),
"@".to_string(),
"1687 年".to_string(),
])?;
let cml_a = c_double.encode_a()?;
println!("CML-A: {}", cml_a);
Ok(())
}
CML 不是:
✅CML是语义时代的Markdown。它的目标是让兼具人类可读和机器可运算特征的关系结构片段,成为可大规模计算、任意传输、分布式存储的语义中间层。
CML 提供了一种 介于自然语言与图库结构之间的语义存储方式。
CML 解决的问题是:
CML语言语法层,以单字符串编码的优势为中心,专注纯粹、极简、跨媒介、可运算的特性:
比如上图,就可以通过html的标签属性,来主动公开明确的图片语义,让LLM更好的推断。
<img src='./assets/contextMarkLanguage.png',data-cml="..." />
也可以通过markdown规范来零成本兼容承载:

graph LR
A(cml编码字符串)
E(基元双序列)
F(基元单序列)
M(Markdown标记、数组)
M<-->|上层方法|E
M<-->|上层方法|F
E<-->|语法层编解码|A
F<-->|语法层编解码|A
//支持4种等价的编码模式,分别面向普适性、大规模性能、低熵不可读性、最低熵
fn is_cml(encoded: &str) -> Result<(), Box<dyn std::error::Error>> //验证CML是否合法
fn cml_to_a(encoded: &str) -> Result<String, Box<dyn std::error::Error>> //转换成a模式存储,双层Base58
fn cml_to_c(encoded: &str) -> Result<String, Box<dyn std::error::Error>> //转换成c模式存储,双层Base64URL
fn cml_to_p(encoded: &str) -> Result<String, Box<dyn std::error::Error>> //转换成p模式存储, 单层明文混编
fn cml_to_q(encoded: &str) -> Result<String, Box<dyn std::error::Error>> //转换成q模式存储, 双层混编
//中间结构转换
fn cml_to_elements(encoded: &str) -> Result<CMLSingle, Box<dyn std::error::Error>> //将cml编码解析为基元序列
fn cml_to_fragments(encoded: &str) -> Result<CMLDouble, Box<dyn std::error::Error>> //将cml编码解析为双序列
//上层markdown转换
fn to_markdown(encoded: &str) -> String //将cml编码转换成md反引号格式
fn from_markdown(md: &str) -> Result<Vec<String>, Box<dyn std::error::Error>> //将反引号编码的md格式转换成基元序列
fn new(slice: Vec<String>) -> Result<CMLDouble, Box<dyn std::error::Error>> //手动构造
//基元类型抽象的单序列
//- 单序列<token>,<separator>,<token>,<separator>,...<token>
impl CMLSingle {
fn encode_a(&self) -> Result<String, Box<dyn std::error::Error>>
fn encode_c(&self) -> Result<String, Box<dyn std::error::Error>>
fn encode_p(&self) -> Result<String, Box<dyn std::error::Error>>
fn encode_q(&self) -> Result<String, Box<dyn std::error::Error>>
fn is_valid(&self) -> Result<(), Box<dyn std::error::Error>>
}
//基元类型的分类双序列编码
//- 奇数序列<token>,<token>,...<token>
//- 偶数序列<separator>,<separator>,...<separator>
impl CMLDouble {
fn encode_a(&self) -> Result<String, Box<dyn std::error::Error>>
fn encode_c(&self) -> Result<String, Box<dyn std::error::Error>>
fn encode_p(&self) -> Result<String, Box<dyn std::error::Error>>
fn encode_q(&self) -> Result<String, Box<dyn std::error::Error>>
fn is_valid(&self) -> Result<(), Box<dyn std::error::Error>>
}
本项目采用MIT宽松授权。本项目是对 Context Mark Language (CML)核心规范的标准实现。
原始语言文档 :doc-war.com/CML
原始协议仓库链接:https://github.com/ContextMark/CML