当构建 NumPy 时,将记录有关系统配置的信息,并且通过使用 NumPy 的 C API 的扩展模块提供。这些信息主要在 numpyconfig.h 中定义(包含在 ndarrayobject.h 中)。公共符号以 NPY_* 为前缀。NumPy 还提供了一些用于查询正在使用的平台信息的功能。
这里遵循了社区的习惯译法“移动”,学过 C++ 的读者可能比较熟悉了;对使用其他语言的读者来说,要特别注意这里的“移动”在语义上并非像真实生活中那样简单地挪动物品的位置,而是涉及一个非常重要的概念——所有权。在这个语义下,你可以把它理解为将值从一个所有者移交给另一个所有者,这里的重点是对所有权的转移,而所有权是 Rust 的核心概念。——译者注
前些天在某 IDC 售后群里潜水,看到很多 MC 服主都在为正盗版 UUID 转换发愁(如果您不理解的话,Minecraft 服务器可以被设置为正版和盗版两种验证模式,而在此两种模式下运行的服务器实例为玩家生成的唯一标识符,也即 UUID 是完全不同的,前者从 Minecraft 正版验证服务直接获取,后者由服务端以玩家 ID 直接生成 UUID v3),遂打算开发一款能够快速转换玩家 UUID 的桌面应用。
在Rust源代码中,rust/library/alloc/benches/slice.rs文件的作用是对&[T]类型(切片类型)进行性能基准测试。该文件包含了对切片类型的一系列操作的基准测试,例如切片迭代、切片排序、切片的iter和into_iter方法等。
break 表达式会退出所在循环。(在 Rust 中,break 只能用在循环中,不能用在 match 表达式中,这与 switch 语句不同。)
NumPy 1.19.5 是一个小的 bug 修复版本。除了修复了一些错误外,主要的改进是更新到了 OpenBLAS 0.3.13,在不中断其他平台执行的同时解决了 Windows 2004bug。此版本支持 Python 3.6-3.9,并计划是 1.19.x 循环中的最后一个版本。
有没有同学记得我们一起挖了多少个坑?嗯…其实我自己也不记得了,今天我们再来挖一个特殊的坑,这个坑可以说是挖到根源了——元编程。
在Rust源代码中,rust/library/alloc/src/vec/mod.rs这个文件是Rust标准库中的Vec类型的实现文件。Vec是一个动态大小的数组类型,在内存中以连续的方式存储其元素。
使用 cygpath 实用程序(Base 安装的一部分)进行实际转换。如果失败,则回退返回原始路径。
在 Rust 中,"转移所有权"(Ownership Transfer)是一种核心概念,它涉及变量和数据的所有权从一个实体转移到另一个实体。这种机制帮助 Rust 在编译时期管理内存安全,避免悬挂指针和内存泄漏等问题。
安全问题可以按照项目 README 中描述的方式进行私下报告,也可以在打开问题跟踪器上的新问题时进行报告。Python 安全报告指南是一个很好的资源,其中的注意事项也适用于 NumPy。
在Rust源代码中,apply_demorgan.rs文件位于rust-analyzer工具的ide-assists库中,其作用是实现一个辅助函数,用于在代码中应用De Morgan定律的变换。
函数式编程的理念:把函数当成变量来用,关注于描述问题而不是怎么实现(这样可以让代码更易读)
科学无非就是在自然界的多样性中寻求统一性(或者更确切地说,是在我们经验的多样性中寻求统一性)。用 Coleridge 的话说,诗歌、绘画、艺术,同样是在多样性中寻求统一性。
Rust 是一种系统级编程语言,它的设计目标是提供高性能、安全性和并发性。Rust 的主要优势包括:
本文是《Rust in action》学习总结系列的第二部分,更多内容请看已发布文章:
Hubris 是由Oxide Computer Company开发的用于微控制器的操作系统。
大家好,我是「柒八九」。一个「专注于前端开发技术/Rust及AI应用知识分享」的Coder。
在知乎发现了几篇非常有意思的Unsafe 随堂小测[1],我来尝试解答一下。本文为第一篇。
在Rust源代码中,rust-analyzer是一个Rust编程语言的语言服务器。它提供了代码补全、代码重构和代码导航等功能来帮助开发者提高编码效率。
本文是《Rust in action》学习总结系列的第三部分,更多内容请看已发布文章:
定义不复杂,Deref 只包含一个 deref 方法签名。该 trait 妙就妙在,它会被编译器 「隐式」调用,官方的说法叫 deref. 强转(deref coercion)[23] 。标准库示例:
本文讨论了如何通过在Rust编程语言中编码,可以更有效地利用现有资源以帮助保护我们的星球。
给定这 3 种类型中任意一种类型的值 v,表达式 v.len() 都会给出 v 中的元素数,而 v[i] 引用的是 v 的第 i 个元素。v 的第一个元素是 v[0],最后一个元素是 v[v.len() - 1]。Rust 总是会检查 i 是否在这个范围内,如果没在,则此表达式会出现 panic。v 的长度可能为 0,在这种情况下,任何对其进行索引的尝试都会出现 panic。i 的类型必须是 usize,不能使用任何其他整型作为索引。
迭代器模式允许你对一个序列的项进行某些处理。迭代器(iterator)负责遍历序列中的每一项和决定序列何时结束的逻辑。当使用迭代器时,我们无需重新实现这些逻辑。
数组迭代器封装了通用函数中的许多关键功能,允许用户代码支持输出参数、保留内存布局和使用错误对齐或类型的数据缓冲,而无需进行困难的编码。
我对学习一门新语言一直犹豫不决。在我的职业生涯中,我大部分时间都使用Python。当需要时,我也会使用诸如PowerShell、Lua和Javascript等语言,但我总是回到我熟悉的领域。我在大学之外从未使用过编译语言或系统语言,现在是时候重新学习一门新语言了。
在Rust编译器源代码中,rust/compiler/rustc_errors/src/diagnostic_builder.rs文件的作用是定义错误和警告的构建器,用于生成编译器诊断信息。这个文件是Rust编译器错误报告系统的一部分,负责处理和构建诊断信息,并向用户提供详细的错误和警告信息。
在 Rust 中,Trait 是一种用于实现共享行为和抽象的重要特性。Trait 对象是 Rust 中的另一个强大概念,允许我们在运行时处理不同类型的对象,实现灵活的抽象和动态分发。本篇博客将深入探讨 Rust 中的 Trait 对象,介绍其定义、使用方法以及与泛型的区别。我们将通过代码示例和详细解释带你一步步了解 Trait 对象的魅力。
原文见:https://deterministic.space/elegant-apis-in-rust.html
ChatGPT[1] 就不用多做介绍了,大家应该都知道。众所周知,Rust 中学习过程中最知名的学习障碍是生命周期(Lifetime)。于是,我今天尝试让 ChatGPT 来解释 Rust 的生命周期问题,看看 ChatGPT 对于降低 Rust 学习曲线是否有确切的帮助。
大家好,我是「柒八九」。一个「专注于前端开发技术/Rust及AI应用知识分享」的Coder
rust 也有泛型,这种最早出现1970年代的Ada语言中,后来被许多基于对象和面向对象的语言所采用,包括BETA、 C++、java。 rust 也借鉴了这一特性。 这种特性让程序有更好的通用性。
熟悉 C++ 的程序员应该还记得该语言中有两种字符串类型。字符串字面量的指针类型为 const char *。标准库还提供了一个 std::string 类,用于在运行期动态创建字符串。
在Rust源代码中,rust/compiler/rustc_mir_transform/src/simplify.rs文件是Rust编译器中一系列进行MIR(中间表示)简化的转换的实现。MIR是Rust编译器中用于进行优化和代码生成的中间表示。
我们的作品是基于大模型实现的一个代码转译可视化工具,完全由 Rust 实现,也可能是这次赛事唯一一个用 Rust 实现的作品吧。
这个错误码`E0275`[2]表示在在解析某些类型限定时存在无限递归。具体到上面代码,是计算Node<Vec<()>>: Sized 的 Sized 限定时产生了无限递归。
来源:https://mnt.io/2018/09/11/from-rust-to-beyond-the-c-galaxy/
在Rust源代码中的rust/src/tools/clippy/clippy_lints/src/types/borrowed_box.rs文件是Clippy项目的一个规则,用于检查可能是误用或错误的Box引用情况。
一门编程语言的类型系统会影响到开发者的形式和效率及程序员的安全性。 因为对于计算机而言,它并不知道有什么类型,最终执行的都是一条条指令,或与内存打交道,内存中的数据是字节流。
本系列主要是分析RustSecurity 安全数据库库中记录的Rust生态社区中发现的安全问题,从中总结一些教训,学习Rust安全编程的经验。
本篇为一个新的章节《手动绑定 C 库入门》的第一篇。从这个章节开始,我们将会进行使用 Rust 对 C 库进行封装的实践。
由于 fuck 在英语中是脏话,Brainfuck 有时被称为 Brainfsck,甚至被简称为 BF。它是大多数学生们学习编译器理论知识的好朋友,这一切都是因为它 fuck simple。我们对 JIT 编译器的第一次尝试是如此的简单,甚至有点可笑。不过你想笑就笑吧,很快就会轮到编译器嘲笑你了,你会被告知自己写的解释器有多么的慢。
在 Rust 生态,使用 yew 开发 WebAssembly 应用方面,我们已经介绍了《起步及 crate 选择》、《组件和路由》,以及《资源文件及重构》。今天,我们介绍如何在 yew 开发的 wasm 前端应用中,与后端进行数据交互。我们的后端提供了 GraphQL 服务,让我们获取 GraphQL 数据并解析吧!
在Rust源代码中,iter_out_of_bounds.rs文件是Clippy lints库的一部分,该库用于静态代码分析,用于检测Rust代码中的潜在问题和错误。iter_out_of_bounds.rs文件中包含了一个名为iter_out_of_bounds的lint规则,用于检查代码中可能会导致迭代器越界访问的问题。
在本指南中,我们将比较 Rust 和 Python 编程语言。我们将讨论每种情况下的适用用例,回顾使用 Rust 与 Python 的优缺点,并说明为什么 Rust 可能会取代 Python。
目前可以编译并运行非常简单的着色器,而且核心库的很大一部分也可以编译。但是,很多功能还没有实现:例如,还不支持循环和开关!这意味着,尽管该项目在技术上可用,但远未达到可以投入生产使用。
Rust是一种以安全性和高效性著称的系统级编程语言,其设计哲学是在不损失性能的前提下,保障代码的内存安全和线程安全。在Rust中,动态大小类型(DST)是一种特殊的类型,它的大小在编译时无法确定,需要在运行时根据实际情况进行确定。动态大小类型在Rust中有着重要的应用场景,例如引用类型、trait对象等。本篇博客将深入探讨Rust中的动态大小类型,包括动态大小类型的定义、使用场景、使用方法以及注意事项,以便读者了解如何在Rust中正确理解和使用动态大小类型,编写安全的代码。
std::mem::take:将变量 dest 替换为其类型的默认值,并返回原来的 dest 值
迄今为止,我们看到的所有指针类型(无论是简单的 Box<T> 堆指针,还是 String 值和 Vec 值内部的指针)都是拥有型指针,这意味着当拥有者被丢弃时,它的引用目标也会随之消失。Rust 还有一种名为引用(reference)的非拥有型指针,这种指针对引用目标的生命周期毫无影响。
领取专属 10元无门槛券
手把手带您无忧上云