这篇文章介绍了名为"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 | FAISS | Milvus | Qdrant |
|---|---|---|---|---|
| 搜索延迟 | 84.93 纳秒 | ~500 纳秒 | ~800 纳秒 | ~950 纳秒 |
| 最大每秒查询次数 | 1000万 | 10万-100万 | 10万-100万 | ~50万 |
| 时间支持 | ✅ | ❌ | ❌ | ❌ |
为什么重要
ChronoMind不仅更快——它还具有前瞻性(至少目前是),将先进的时间智能与Rust的无与伦比的性能相结合。不管你是在构建实时应用,还是处理海量数据集,这个引擎都可以改变你处理向量搜索的方式。
我很期待听到你们的反馈和想法!欢迎在评论中讨论用例、基准测试或任何其他问题。
--
From 日报小组 Mike
社区学习交流平台订阅:
原文作者:Rust语言中文社区;如有侵权,请联系管理员删除。