随着 Deno 成为 Node.js 的新竞争对手,许多新闻文章都提到了 Rust 的内存安全特性,其中一篇特别的文章指出 Rust 和 Go 因其内存安全特性而受益,Swift 和 Kotlin 也是如此但后两者并没有广泛用于系统编程。
Safe Rust 是真正的 Rust 编程语言。如果您所做的只是编写 Safe Rust,您将永远不必担心类型安全或内存安全。您永远不会忍受悬空指针、释放后使用或任何其他类型的未定义行为。
这激起了我的兴趣,想了解 Python 是否可以被视为内存安全,如果是或否,安全或不安全的程度如何?
从一开始,维基百科上关于内存安全的文章就没有提到Python,而关于Python的文章似乎只提到了内存管理。我最接近找到答案的是Daniel 的这个:
维基百科文章将类型安全与内存安全相关联,这意味着同一内存区域不能作为整数和字符串进行访问。这样Python就是类型安全的。您不能隐式更改对象的类型。
但即便如此,这似乎也仅仅暗示了两个方面之间的联系(使用维基百科的关联,这又是有争议的),并且对于 Python 是否可以被视为内存安全没有明确的答案。
方法喜欢maps并且collect只接受块.如果块不是对象而不能保存到变量,那么为什么这些方法需要它们作为参数?
multiples_of_2 = Proc.new do |x|
x % 2 == 0
end
sq = Proc.new { |x| x ** 2 }
(1..50).to_a.select(&multiples_of_2) # => works properly
(1..50).to_a.select(multiples_of_2) # => `wrong number of arguments(1 for 0)`
[4, 5, 6].map!(sq) # => `wrong number of arguments(1 for 0)`
[10, 12, 14].collect!(sq) # => `wrong number of arguments(1 for 0)`
Run Code Online (Sandbox Code Playgroud)