关于 Unsafe Rust 的社区调研,欢迎大家参与
这项调查是由卡内基梅隆大学的Ian McCormack进行的研究项目的一部分,并由美国国家科学基金会资助。
作为参与者,您将被要求完成一份关于您使用Rust及其 Unsafe 语言特性的10分钟在线调查。
https://cmu.ca1.qualtrics.com/jfe/form/SV_eaE73MZ8126LsVw
这项调查是由卡内基梅隆大学的Ian McCormack进行的研究项目的一部分,并由美国国家科学基金会资助。
作为参与者,您将被要求完成一份关于您使用Rust及其 Unsafe 语言特性的10分钟在线调查。
https://cmu.ca1.qualtrics.com/jfe/form/SV_eaE73MZ8126LsVw
Qualtrics
Qualtrics Survey | Qualtrics Experience Management
The most powerful, simple and trusted way to gather experience data. Start your journey to experience management and try a free account today.
👍1
Cargo 的事后分析(Postmortem Analysis )
前因:在2022年10月28日01:52 UTC,rust-lang/cargo#11183被合并到Cargo主分支中。它引入了一个错误,导致Cargo无法构建使用特定但非常常见的依赖项设置的软件包。该更改几乎进入了下一个夜间版本。如果是这样,它将使得使用结果夜间版本的任何人都无法构建任何30k个依赖项(crates.io上最受欢迎的crate之一)中的 serde_derive 。
后果:在此事件之后,货运团队进行了事后分析,这是针对可能具有广泛爆炸半径或其他重大影响的事件所采取的适当措施。这一次,我们遵循了特定的结构化事后分析模板,希望这样做可以使结果的撰写更加全面、深入和可操作,并最终发现它使我们更好地理解了根本原因和缺失的安全保障。因此,我们希望与其他Rust团队分享我们的经验,以便他们可能会发现它同样有用,无论是部分还是整体。
事后分析模板由四个部分组成:
1. 发生了什么:提供事件背景的摘要,包括如果有的话说明事件影响的度量或图表。这应包括事件期间任何用户面临的影响或体验的摘要。
2. 我们的回应:一份时间表,描述了事件发生期间发生的所有事件,包括已知的具体日期/时间,以及以下四个问题的答案:事件是如何被检测到的?如何提高检测时间?你是如何达到知道如何减轻影响的地步的?如何改善减缓时间?
3. 事件发生的原因:这是最关键的部分。在这里,我们使用“五个为什么”的方法,深入挖掘,直到确定事件的根本原因。每个答案都应该引发一个或多个为什么的问题,直到你确信左边的答案是根本原因为止。值得明确指出的是,“操作员错误”从来不是根本原因,而且这不是一个归咎于操作员的过程。相反,任何操作员错误都是缺失或破损机制的症状,答案应该集中于确定这些不足的机制。
4. 如何修复:五个为什么的练习的结果是一份根本原因清单,应该解决这些原因以减少未来类似事件的风险。从这些根本原因中,我们制定短期和中期的“行动项目”,并在可能的情况下指定具体的负责人。长期解决方案也可以讨论,但行动项目的重点应该放在更为紧急的缓解措施上,这些措施将很快采取。每个行动项目都被分配了一个优先级,通常会转化为适用的GitHub问题。我们立即开始处理任何被确定为紧急的项目,而其他行动项目通常分为“即将”或“一旦可行”的类别。
事后分析完整报告:https://github.com/rust-lang/cargo/issues/12064
官宣:https://blog.rust-lang.org/inside-rust/2023/05/01/cargo-postmortem.html
前因:在2022年10月28日01:52 UTC,rust-lang/cargo#11183被合并到Cargo主分支中。它引入了一个错误,导致Cargo无法构建使用特定但非常常见的依赖项设置的软件包。该更改几乎进入了下一个夜间版本。如果是这样,它将使得使用结果夜间版本的任何人都无法构建任何30k个依赖项(crates.io上最受欢迎的crate之一)中的 serde_derive 。
后果:在此事件之后,货运团队进行了事后分析,这是针对可能具有广泛爆炸半径或其他重大影响的事件所采取的适当措施。这一次,我们遵循了特定的结构化事后分析模板,希望这样做可以使结果的撰写更加全面、深入和可操作,并最终发现它使我们更好地理解了根本原因和缺失的安全保障。因此,我们希望与其他Rust团队分享我们的经验,以便他们可能会发现它同样有用,无论是部分还是整体。
事后分析模板由四个部分组成:
1. 发生了什么:提供事件背景的摘要,包括如果有的话说明事件影响的度量或图表。这应包括事件期间任何用户面临的影响或体验的摘要。
2. 我们的回应:一份时间表,描述了事件发生期间发生的所有事件,包括已知的具体日期/时间,以及以下四个问题的答案:事件是如何被检测到的?如何提高检测时间?你是如何达到知道如何减轻影响的地步的?如何改善减缓时间?
3. 事件发生的原因:这是最关键的部分。在这里,我们使用“五个为什么”的方法,深入挖掘,直到确定事件的根本原因。每个答案都应该引发一个或多个为什么的问题,直到你确信左边的答案是根本原因为止。值得明确指出的是,“操作员错误”从来不是根本原因,而且这不是一个归咎于操作员的过程。相反,任何操作员错误都是缺失或破损机制的症状,答案应该集中于确定这些不足的机制。
4. 如何修复:五个为什么的练习的结果是一份根本原因清单,应该解决这些原因以减少未来类似事件的风险。从这些根本原因中,我们制定短期和中期的“行动项目”,并在可能的情况下指定具体的负责人。长期解决方案也可以讨论,但行动项目的重点应该放在更为紧急的缓解措施上,这些措施将很快采取。每个行动项目都被分配了一个优先级,通常会转化为适用的GitHub问题。我们立即开始处理任何被确定为紧急的项目,而其他行动项目通常分为“即将”或“一旦可行”的类别。
事后分析完整报告:https://github.com/rust-lang/cargo/issues/12064
官宣:https://blog.rust-lang.org/inside-rust/2023/05/01/cargo-postmortem.html
GitHub
Incident postmortem: Cargo cannot compile crates depending on indirect optional host dependencies · Issue #12064 · rust-lang/cargo
Summary The open source Cargo project is the cornerstone of the Rust programming language. Cargo is both the community package manager interacting with the public and private package registries, an...
Rust 视界
欢迎大家关注 GPT 视界,将不定时关注 GPT 开发生态 GPT 信息就不占用本 Channel 了 GPT 视界 https://www.tg-me.com/daydaygpt
discord group 来了 https://discord.gg/rVM7dfTT
Discord
Discord - Group Chat That’s All Fun & Games
Discord is great for playing games and chilling with friends, or even building a worldwide community. Customize your own space to talk, play, and hang out.
异步工作组的2023年主要目标是稳定 trait中异步函数的“最小可行产品”(MVP)版本
计划在 Rust 1.74 版本稳定,该版本将于2023年11月16日发布
MVP 功能包括:
1. 支持“在 trait 中定义异步函数”的核心功能
2. 在使用异步函数的 trait 时,会出现一种在同步函数中不存在的复杂情况。许多异步运行时(特别是包括 Tokio 和 async-std 的默认配置)使用工作窃取线程调度程序。这意味着未来可能会在工作线程之间动态移动以实现负载平衡。因此,未来只能捕获 Send 数据。
有点不幸的是,我们不得不从使用
未来解决办法:引入 associated return types (ARTs) ,目前正在起草 RFC,在具有许多方法的特征中,ARTs变得冗长,将来可能会考虑更简洁的语法(https://play.rust-lang.org/?version=nightly&mode=debug&edition=2021&gist=2066934a05cb9eafc0b47af7bdf8c57f)。
3. 在 trait 和 trait impls 中使用 -> impl Trait 符号的用法
相关 RFC 3425 ,示例:https://play.rust-lang.org/?version=nightly&mode=debug&edition=2021&gist=75cfc199cc50a111576c2d8e342ae823
一旦完成了这个MVP,接下来呢?我们下一个即时目标是在2024年发布动态调度和异步闭包支持。
详细:https://blog.rust-lang.org/inside-rust/2023/05/03/stabilizing-async-fn-in-trait.html
计划在 Rust 1.74 版本稳定,该版本将于2023年11月16日发布
MVP 功能包括:
1. 支持“在 trait 中定义异步函数”的核心功能
rust
trait HealthCheck {
async fn check(&mut self) -> bool;
}
impl HealthCheck for MyHealthChecker {
async fn check(&mut self) -> bool {
do_async_op().await
}
}
async fn do_health_check(hc: impl HealthCheck) {
if !hc.check().await {
log_health_check_failure().await;
}
}
2. 在使用异步函数的 trait 时,会出现一种在同步函数中不存在的复杂情况。许多异步运行时(特别是包括 Tokio 和 async-std 的默认配置)使用工作窃取线程调度程序。这意味着未来可能会在工作线程之间动态移动以实现负载平衡。因此,未来只能捕获 Send 数据。
rust
async fn do_health_check_par<HC>(hc: HC)
where
HC: HealthCheck + Send + 'static,
HC::check(): Send, // <-- associated return type
{
tokio::task::spawn(async move {
if !hc.check().await {
log_health_check_failure().await;
}
});
}
有点不幸的是,我们不得不从使用
impl HealthCheck
转换为显式 HC 类型参数来使用这个符号。RFC 2289,“关联类型限定”,引入了一种紧凑的符号来解决这个问题。该RFC不是这个MVP的一部分,但如果它被稳定下来,那么我们可以简单地写成:rust
async fn do_health_check_par(hc: impl HealthCheck<check(): Send> + Send + 'static) {
// -------------
tokio::task::spawn(async move {
if !hc.check().await {
log_health_check_failure().await;
}
});
}
未来解决办法:引入 associated return types (ARTs) ,目前正在起草 RFC,在具有许多方法的特征中,ARTs变得冗长,将来可能会考虑更简洁的语法(https://play.rust-lang.org/?version=nightly&mode=debug&edition=2021&gist=2066934a05cb9eafc0b47af7bdf8c57f)。
3. 在 trait 和 trait impls 中使用 -> impl Trait 符号的用法
rust
trait LaunchService {
fn launch(
&mut self,
request: Request,
) -> impl Future<Output = u32>;
// -------------------------
// Does not capture `self` as it does
// not include a `+ '_`.
}
相关 RFC 3425 ,示例:https://play.rust-lang.org/?version=nightly&mode=debug&edition=2021&gist=75cfc199cc50a111576c2d8e342ae823
一旦完成了这个MVP,接下来呢?我们下一个即时目标是在2024年发布动态调度和异步闭包支持。
详细:https://blog.rust-lang.org/inside-rust/2023/05/03/stabilizing-async-fn-in-trait.html
play.rust-lang.org
Rust Playground
A browser interface to the Rust compiler to experiment with the language
🔥5
Forwarded from AI 视界
llm-chain: 纯 Rust 实现的类似 langchain 的框架
主要重点是为提示模板提供强大的支持,并在多步链中将提示链接在一起,从而实现 LLM 无法在单个步骤中处理的复杂任务
目前发布 0.9 版本
https://github.com/sobelio/llm-chain
主要重点是为提示模板提供强大的支持,并在多步链中将提示链接在一起,从而实现 LLM 无法在单个步骤中处理的复杂任务
目前发布 0.9 版本
https://github.com/sobelio/llm-chain
GitHub
GitHub - sobelio/llm-chain: `llm-chain` is a powerful rust crate for building chains in large language models allowing you to summarise…
`llm-chain` is a powerful rust crate for building chains in large language models allowing you to summarise text and complete complex tasks - sobelio/llm-chain
Rust 视界
RustMagazine 第三期正式发布 https://rustmagazine.org/issue-3/
这一期有采访 actix-web 的维护者,他非常详细的回答了 2020 年 actix-web 原作者因为 Unsafe 事件退出之后,他是怎样接手并继续维护 actix-web 的,非常棒的文章,强烈推荐!
👍3
Mojo 语言终于传播到 Reddit Rust 社区了,以下摘录一些评论:
1. 承诺完全向后兼容Python,具有显着更高的性能,并能选择使用一些(特别是不是全部)Rust的功能是一项艰巨的任务。这并非不可能,背后的团队实力雄厚;如果有人能做到,他们可以。但是,是否有人能做到呢?
2. 同意。CPython 的表面积非常庞大,是在几十年的时间里建立起来的(即使 Python 3 也已经有十四年的历史了!),而且它还在不断添加新功能。仅仅在 LLVM 上构建一个兼容的 Python 解释器,而不添加新功能,是一个很高的要求。与其将Mojo视为“Python的超集”,不如将其视为“对Python程序员易于学习的语言”。更像是Python 3与Python 2之间的区别——一种不同的语言,您可以将现有的代码和技能移植到其中,但仍需要进行一些修改。Python 3的过渡显示了这一切是多么具有挑战性。最终,Python幸存了下来,但这是痛苦的。Mojo必须非常出色,才能值得投入这些努力。
3. 我常用的语言是Python和Rust。我可以看到未来是Mojo和Rust。那可能很酷。
4. 考虑到克里斯·拉特纳的参与,我认为这是很严肃的。Mojo似乎针对MLIR进行性能优化。Rust 是否有与 MLIR 相关的方向?
5. 正是我一直在等待的!一种具有 Rust 简单借用规则、C++ 偏执特性和 Python 类型安全性的语言。公平地说,他们似乎在针对高性能人工智能领域,这是我没有太多经验的领域。但在我看来,他们似乎试图将他们从使用的所有语言中喜欢的功能结合起来,而没有考虑它们是否结合成了一些连贯的东西。此外,我必须质疑他们声称能够做到的一些事情,比如拥有像 Rust 那样强大的借用检查器,但语法明显更少,这是否在技术上可行。我想我们会在他们实现更多的待办事项时看到发展情况。
6. 除非它们添加生命周期参数,否则它的功能不会像 Rust 那样强大。如果它们添加了生命周期参数,它基本上会像 Rust 一样复杂。不过并不是说它没有用处。
7. 免责声明:Python 仍然是我最喜欢和最不喜欢的编程语言之一。我认为 mojo 今天对 Python 代码可能会产生巨大影响,原因有几个。首先,TypeScript 的成功表明现有语言中存在对更安全/更好的代码的真正需求。此外,渐进式采用模式使团队能够迁移现有代码而不必担心出现故障。对(可以说是)最流行的编程语言进行超集处理,并确保与所有主要库的兼容性,使从 Python 切换到 mojo 几乎是无痛的。其次,云基础设施的广泛采用迫使人们考虑性能问题。当您永久租用计算资源时,2倍或20倍的性能提升意味着1/2或1/20的重复成本,而不仅仅是购买另一台服务器。最后,我相信克里斯·拉特纳。他是LLVM(以及更多)的创始人。基本上他所开发的一切最终都会以某种方式变得相关。
8. Mojo的设计方式是将所有被认为“时髦”的现有语言都扔进一个桶里,然后雇用一些顶级营销人员撰写一些非常华丽的文本,就这样。它一次包含了所有真正好的和可怕的想法。我的观点是:当你一次混合太多东西时,通常会看起来和感觉像呕吐物。
9. 大多数语言都包含来自其他语言的思想。如果那些其他语言因为其特点受到喜爱,那就没有什么不好的。我同意它保留了一些 Python 的负担,这些负担本来可以放弃,但 TypeScript 也是如此。显然,现在使用这种语言制定任何计划都为时过早,但如果无缝的Python互操作性表现良好,我对它的未来持谨慎乐观态度。
10. 一个声称作为 Python 超集的语言如何实现系统级性能,这是没有意义的。它是编译的吗?转换成 C 语言?它是 Rust 的超集,看起来像 Python,具有互操作性吗?我对此不是很了解,所以我不会否认这种说法,但是这样声称东西往往是为了吸引点击量,几乎肯定是不真实的。除非我误解了标题。我找到了答案。这似乎可以编译成MLIR,这是一种多级中间表示语言,允许类似于LLVM的体验。除了它不像LLVM那样进行低级别优化(硬件特定)。如果他们解决了这个问题,我不确定他们是否会这样做。但是现在似乎真的没有必要。无论如何,它肯定是高效的,但他们网站上的演示可能是一个特定的案例。
11. MLIR是LLVM IR的演进,所有LLVM工具链都在向其转移,包括clang。
12. 这只是试图做 Julia 所做的事情,但更糟糕。据说这个软件将拥有 Julia 没有的功能,并且结构上有很大的不同。它还有一个很大的好处,就是可以轻松地与 Python 进行交互。至于 Julia……几年前我对它非常兴奋,但使用它大多数时候都是一种可怕的体验,我在太多方面不同意它的设计,也不是它吸引的社区的粉丝。(别人回复这条:Julia的设计旨在吸引Matlab用户。)
13. 有没有其他人觉得Mojo是Modular公司的营销噱头?
https://www.reddit.com/r/rust/comments/1380uk0/the_mojo_programming_language_a_python_superset/
1. 承诺完全向后兼容Python,具有显着更高的性能,并能选择使用一些(特别是不是全部)Rust的功能是一项艰巨的任务。这并非不可能,背后的团队实力雄厚;如果有人能做到,他们可以。但是,是否有人能做到呢?
2. 同意。CPython 的表面积非常庞大,是在几十年的时间里建立起来的(即使 Python 3 也已经有十四年的历史了!),而且它还在不断添加新功能。仅仅在 LLVM 上构建一个兼容的 Python 解释器,而不添加新功能,是一个很高的要求。与其将Mojo视为“Python的超集”,不如将其视为“对Python程序员易于学习的语言”。更像是Python 3与Python 2之间的区别——一种不同的语言,您可以将现有的代码和技能移植到其中,但仍需要进行一些修改。Python 3的过渡显示了这一切是多么具有挑战性。最终,Python幸存了下来,但这是痛苦的。Mojo必须非常出色,才能值得投入这些努力。
3. 我常用的语言是Python和Rust。我可以看到未来是Mojo和Rust。那可能很酷。
4. 考虑到克里斯·拉特纳的参与,我认为这是很严肃的。Mojo似乎针对MLIR进行性能优化。Rust 是否有与 MLIR 相关的方向?
5. 正是我一直在等待的!一种具有 Rust 简单借用规则、C++ 偏执特性和 Python 类型安全性的语言。公平地说,他们似乎在针对高性能人工智能领域,这是我没有太多经验的领域。但在我看来,他们似乎试图将他们从使用的所有语言中喜欢的功能结合起来,而没有考虑它们是否结合成了一些连贯的东西。此外,我必须质疑他们声称能够做到的一些事情,比如拥有像 Rust 那样强大的借用检查器,但语法明显更少,这是否在技术上可行。我想我们会在他们实现更多的待办事项时看到发展情况。
6. 除非它们添加生命周期参数,否则它的功能不会像 Rust 那样强大。如果它们添加了生命周期参数,它基本上会像 Rust 一样复杂。不过并不是说它没有用处。
7. 免责声明:Python 仍然是我最喜欢和最不喜欢的编程语言之一。我认为 mojo 今天对 Python 代码可能会产生巨大影响,原因有几个。首先,TypeScript 的成功表明现有语言中存在对更安全/更好的代码的真正需求。此外,渐进式采用模式使团队能够迁移现有代码而不必担心出现故障。对(可以说是)最流行的编程语言进行超集处理,并确保与所有主要库的兼容性,使从 Python 切换到 mojo 几乎是无痛的。其次,云基础设施的广泛采用迫使人们考虑性能问题。当您永久租用计算资源时,2倍或20倍的性能提升意味着1/2或1/20的重复成本,而不仅仅是购买另一台服务器。最后,我相信克里斯·拉特纳。他是LLVM(以及更多)的创始人。基本上他所开发的一切最终都会以某种方式变得相关。
8. Mojo的设计方式是将所有被认为“时髦”的现有语言都扔进一个桶里,然后雇用一些顶级营销人员撰写一些非常华丽的文本,就这样。它一次包含了所有真正好的和可怕的想法。我的观点是:当你一次混合太多东西时,通常会看起来和感觉像呕吐物。
9. 大多数语言都包含来自其他语言的思想。如果那些其他语言因为其特点受到喜爱,那就没有什么不好的。我同意它保留了一些 Python 的负担,这些负担本来可以放弃,但 TypeScript 也是如此。显然,现在使用这种语言制定任何计划都为时过早,但如果无缝的Python互操作性表现良好,我对它的未来持谨慎乐观态度。
10. 一个声称作为 Python 超集的语言如何实现系统级性能,这是没有意义的。它是编译的吗?转换成 C 语言?它是 Rust 的超集,看起来像 Python,具有互操作性吗?我对此不是很了解,所以我不会否认这种说法,但是这样声称东西往往是为了吸引点击量,几乎肯定是不真实的。除非我误解了标题。我找到了答案。这似乎可以编译成MLIR,这是一种多级中间表示语言,允许类似于LLVM的体验。除了它不像LLVM那样进行低级别优化(硬件特定)。如果他们解决了这个问题,我不确定他们是否会这样做。但是现在似乎真的没有必要。无论如何,它肯定是高效的,但他们网站上的演示可能是一个特定的案例。
11. MLIR是LLVM IR的演进,所有LLVM工具链都在向其转移,包括clang。
12. 这只是试图做 Julia 所做的事情,但更糟糕。据说这个软件将拥有 Julia 没有的功能,并且结构上有很大的不同。它还有一个很大的好处,就是可以轻松地与 Python 进行交互。至于 Julia……几年前我对它非常兴奋,但使用它大多数时候都是一种可怕的体验,我在太多方面不同意它的设计,也不是它吸引的社区的粉丝。(别人回复这条:Julia的设计旨在吸引Matlab用户。)
13. 有没有其他人觉得Mojo是Modular公司的营销噱头?
https://www.reddit.com/r/rust/comments/1380uk0/the_mojo_programming_language_a_python_superset/
Reddit
From the rust community on Reddit: The Mojo Programming Language: A Python Superset Drawing from Rust's Strengths
Explore this post and more from the rust community
👍6❤1🥰1
发现一家公司 Pinecone 做向量数据库的,从python到cpp再到用 Rust 重写,大概是半年前,融资到B轮,筹集了1亿美元
https://www.pinecone.io/learn/rust-rewrite/
https://www.pinecone.io/learn/rust-rewrite/
www.pinecone.io
Rewriting a high performance vector database in Rust