为什么Go语言不是想象中的那么好(6)

Haskell也有相似的问题。Haskell同样由于对堆的大量使用而不能胜任嵌入式或者实时编程。然而,我没有看见任何人推荐使用Haskell对机器人编程,所以我不用指出这点。

子问题#2:不安全的底层代码

当我们写嵌入式程序的时候,写一些不安全的代码(不安全的的类型转换,或者指针运算)是不可避免的。在C或C++中,做这样的事情是很简单的。如果我需要向0x1234这个内存地址写入0xff这个值来点亮一个LED,我可以这样写:

(C/C++)

*(uint8_t*)0x1234 = 0xFF;

这样做很危险,只有当我们写非常底层的系统代码的时候才有意义。这就是Go和Haskell没有简单的方式来做这样的事的原因:它们不是系统编程语言。

好的解决方案:将不安全的代码孤立开来

注重安全和系统编程的Rust语言有一个非常好的解决方案:unsafe代码块。unsafe代码块是一种显示地将不安全的代码分离出来的方式。我们通过如下的方式在Rust语言中向0x1234地址写入0xff:

(Rust)

unsafe{ *(0x1234 as *mut u8) = 0xFF; }

如果我们在unsafe代码块外面做这样的事情,Rust的编译器会警告我们。这样允许我们在满足嵌入式编程需要的同时,保持了程序的安全和稳定。

Go的解决方案:没有

Go语言本来就不是为了做这样的事而出现的,所以没有任何内建的支持。

总结

现在你可能会说,“那么为什么你说Go语言不好?这只是一大堆你的抱怨而已。你可以针对任何语言发牢骚。“没有语言是完美的,这很正确。然而,我希望我的抱怨能在某种程度上说明:

Go语言本质上没有干了什么新的事情

Go语言本身没有被良好地设计

Go语言是其他现代编程语言的退化

英文地址:?

Ubuntu 安装Go语言包

《Go语言编程》高清完整版电子书

Go语言并行之美 -- 超越 “Hello World”

我为什么喜欢Go语言

Go语言内存分配器的实现

Go语言的国际化支持(基于gettext-go)

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/bd5399bb98fc5d4ed3577bb7292edd3b.html