首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >类型安全-围棋对C指针

类型安全-围棋对C指针
EN

Software Engineering用户
提问于 2017-01-28 23:55:06
回答 2查看 3.7K关注 0票数 5

C是一种类型不安全的静态类型语言,因为指针(void *y)允许您做任何您喜欢做的事情,甚至那些会导致程序崩溃的事情。

GO也是一种静态类型语言。

尽管GO有指针(var y *int),它仍然被认为是类型安全的语言.

问题:

考虑到围棋的指针,

为什么GO语言被称为类型安全语言?

EN

回答 2

Software Engineering用户

回答已采纳

发布于 2017-01-29 01:19:53

Go和C之间有一些差异,使得前者至少更安全:

  1. 除非您使用不安全包,否则不会使Go程序崩溃(也就是说,它不会做导致操作系统杀死它的事情)。您可能会引起恐慌,但这与崩溃是不一样的(而且是可以恢复的)。
  2. Go没有指针算法(来源) --尽管它有名为nil的空引用。
  3. Go的void*等价物,interface{},是以一种更安全的方式使用类型断言的,它不仅会崩溃,而且允许更安全的类型测试或类型开关。

基本上,Go和具有类似声明类型和运行时类型(C#和Java)混合的语言都是类型安全的,因为它们用运行时类型系统来补充不健全的类型系统,从而将可能导致崩溃的类型错误转换为运行时异常。

C有不健全的类型系统,也没有防止不安全行为的运行时系统。

有些语言,如苯丙胺类兴奋剂苯丙胺类兴奋剂,也喜欢运行时保护,但它们是类型安全的,因为它们的类型系统使非法操作不可说。

基本上:类型安全意味着语言不会让你做任何违法的事情。

有时运行时会阻止您(就像在Python这样的动态语言中)。

有时类型系统会阻止你。

对我来说,这是两者的结合。

票数 11
EN

Software Engineering用户

发布于 2017-01-29 01:13:50

缺少类型安全性并不来自指针--它来自于void指针和在指针类型之间执行任意转换的能力。“指向整数的指针”没有什么非类型安全性--C中缺少类型安全性是因为不能保证int*实际上指向某个包含整数的内存。

票数 6
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/341152

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档