通过计算器示例学习JIT
这篇文章介绍了名为"The JIT Calculator Challenge"的挑战。挑战的背景是,Rust官方网站曾经展示过一个简单的计算器程序,这是一个20行代码的解释器。文章提出一个新的挑战:将这个简单的计算器程序改造成一个能够生成并直接在CPU上执行机器代码的JIT(即时编译)计算器。
文章详细解释了JIT的概念,指出与普通的解释器相比,JIT编译器在执行前进行所有计算操作,然后生成并运行机器代码。文章提出了具体的步骤: JIT编译:解析所有操作符,并生成相应的机器代码,顺序执行它们。 运行机器代码:在CPU上执行生成的机器代码。
作者还提到了实现这个挑战所需的背景知识,包括如何在操作系统和处理器级别上处理可执行数据的问题。文章特别指出,现代操作系统允许应用程序动态调整内存的执行权限,这对于JIT编译是必需的。
https://ochagavia.nl/blog/the-jit-calculator-challenge/
同时进行多种方式的序列化/反序列化
serde_many 这个库可以扩展序列化的方式。是一个非常有趣的idea。
use serde_many::{DeserializeMany, SerializeMany};
/// Marker for the default serde implementation.
struct Default;
/// Marker for a special serde implementation.
struct Special;
#[derive(SerializeMany, DeserializeMany)]
#[serde_many(default = "Default", special = "Special")] // Declaring the implementation markers.
struct Point {
#[serde(special(rename = "x_value"))]
x: i32,
#[serde(special(rename = "y_value"))]
y: i32,
}
#[test]
fn it_works() {
let mut serialized = Vec::new();
let mut serializer = serde_json::Serializer::pretty(&mut serialized);
let val = Point { x: 0, y: 0 };
SerializeMany::<Default>::serialize(&val, &mut serializer).unwrap();
assert_eq!(
String::from_utf8_lossy(&serialized),
"{
\"x\": 0,
\"y\": 0
}"
);
serialized.clear();
let mut serializer = serde_json::Serializer::pretty(&mut serialized);
SerializeMany::<Special>::serialize(&val, &mut serializer).unwrap();
assert_eq!(
String::from_utf8_lossy(&serialized),
"{
\"x_value\": 0,
\"y_value\": 0
}"
)
}
ChronoMind - 超级快的向量搜索引擎
我很高兴地分享ChronoMind,这是一个尖端的向量相似度搜索引擎,通过本地时间支持重新定义了速度和智能(这两者的结合一直是我最近的重点)。以下是它值得关注的原因:
🚀 极速体验
84.93纳秒搜索延迟——比传统的FAISS和Milvus等解决方案快10-100倍。 完全并发、无锁架构,能够支持超过1000万次每秒的查询。
⏰ 时间智能
首个支持本地时间衰减和重要性加权的向量存储,开启了实时推荐、时间敏感分析等新用例。
💡 关键特点
零复制操作:直接内存访问,极致高效。 上下文感知搜索:具有时间和上下文偏差的超快查询。 内存高效:每个向量仅需3KB,包括元数据。
⚡ 性能亮点
指标 | ChronoMind | FAISS | Milvus | Qdrant |
---|---|---|---|---|
搜索延迟 | 84.93 纳秒 | ~500 纳秒 | ~800 纳秒 | ~950 纳秒 |
最大每秒查询次数 | 1000万 | 10万-100万 | 10万-100万 | ~50万 |
时间支持 | ✅ | ❌ | ❌ | ❌ |
为什么重要
ChronoMind不仅更快——它还具有前瞻性(至少目前是),将先进的时间智能与Rust的无与伦比的性能相结合。不管你是在构建实时应用,还是处理海量数据集,这个引擎都可以改变你处理向量搜索的方式。
GitHub:https://github.com/JtPerez-Acle/chrono-mind/tree/rust
我很期待听到你们的反馈和想法!欢迎在评论中讨论用例、基准测试或任何其他问题。
--
From 日报小组 Mike
社区学习交流平台订阅:
Rustcc论坛: 支持rss 微信公众号:Rust语言中文社区