我在网上阅读随机主题时遇到了鸭子打字这个术语,并没有完全理解它.
什么是"鸭子打字"?
由于未定义的行为,许多不好的事情发生并且继续发生(或者不知道,谁知道,任何事情都可能发生).据我所知,这是为了让编译器进行优化留下一些摆动空间,也可能使C++更容易移植到不同的平台和架构.然而,由未定义的行为引起的问题似乎太大而无法通过这些论证来证明.未定义行为的其他参数是什么?如果没有,为什么还存在未定义的行为?
编辑为我的问题添加一些动机:由于使用较少C++的几个糟糕经历 - 狡猾的同事,我已经习惯了使我的代码尽可能安全.断言每一个论点,严谨的正确性以及类似的东西.我试图离开,因为小房间可能以错误的方式使用我的代码,因为经验表明,如果有漏洞,人们会使用它们,然后他们会打电话给我,说我的代码很糟糕.我认为让我的代码尽可能安全是一种好的做法.这就是为什么我不明白为什么存在未定义的行为.有人可以给我一个未定义行为的例子,这些行为在运行时或编译时无法检测到而没有相当大的开销吗?
随着 Deno 成为 Node.js 的新竞争对手,许多新闻文章都提到了 Rust 的内存安全特性,其中一篇特别的文章指出 Rust 和 Go 因其内存安全特性而受益,Swift 和 Kotlin 也是如此但后两者并没有广泛用于系统编程。
Safe Rust 是真正的 Rust 编程语言。如果您所做的只是编写 Safe Rust,您将永远不必担心类型安全或内存安全。您永远不会忍受悬空指针、释放后使用或任何其他类型的未定义行为。
这激起了我的兴趣,想了解 Python 是否可以被视为内存安全,如果是或否,安全或不安全的程度如何?
从一开始,维基百科上关于内存安全的文章就没有提到Python,而关于Python的文章似乎只提到了内存管理。我最接近找到答案的是Daniel 的这个:
维基百科文章将类型安全与内存安全相关联,这意味着同一内存区域不能作为整数和字符串进行访问。这样Python就是类型安全的。您不能隐式更改对象的类型。
但即便如此,这似乎也仅仅暗示了两个方面之间的联系(使用维基百科的关联,这又是有争议的),并且对于 Python 是否可以被视为内存安全没有明确的答案。