往嵌入式发展还是go语言 go适合嵌入式开发吗( 三 )


可以对计算机一些底层原理了解,比如指令执行过程,内存管理 , 异常,多线程,编译过程等又更深层次的了解 。掌握C语言再学习其他语言会变得很轻松,学习破解也有帮助,毕竟汇编基本都可以反编译出C代码 。
C++
C++是一个糟糕的语言,这不是我说的 , 这是Linux之父说的 。我自己用C++四五年时间 , 越到后面就感觉这句话越有道理 。
首先C++的强大是毋庸置疑的 , 但是作为一个跟C一样偏底层的语言,如果不理解写的代码背后到底发生了什么事,如果出了错 , 你是永远不可能知道错在哪里的 。
一个没有垃圾回收的语言,不用智能指针很容易导致内存泄漏 , 错误的用了智能指针不但内存泄漏之后不好解决,还容易导致提前释放等问题 。
C++支持强制类型转换 , 如果转换前后的内存结构不一样,很有可能导致各种隐性问题 。还有Java之类非原生语言的异常处理都是语言自定义的异常,而C和C++中的异常很多都是操作系统层的异常 。
Windows下一个简单的try catch,你觉得可以抓到try中所有的异常,但是由于异常处理函数的指针保存在栈上 , 这时一个栈溢出可能直接导致异常处理函数指针被覆盖,异常会出现在你意想不到的地方 。微软有大神曾说过,想你的代码后续可维护就删掉代码中所有的try catch 。
又由于语言非常底层,当程序出现底层崩溃的时候 , 想解决掉这个崩溃往往要读一些汇编,这时候如果使用了大量的模板,比如stl和boost , 那生成的汇编几乎完全不可读 。看过stl代码的人应该都知道这玩意儿写的有多晦涩,就导致了你想用一个C++库,如果不了解这个库的实现原理 , 那大概率会出错 。
C++的复杂度又让你很难真的理解那个库的原理,结论就是C++强大,但是必须用的人也强大 。C++直到现在还在疯狂的增加特性,我用了四五年我自己都不敢说自己会玩C++,能用其他语言就优先考虑其他的,把C++作为最后的选项,不建议新手学,除非你的目标领域必须使用 。
Rust
Rust是为了解决C和C++的各种问题而出现的语言,性能接近C++,通过所有权限,不用垃圾回收就解决了生命周期管理 。有包括管理,又有极其严格的编译器检查,能编译通过的代码就不会有大问题,编译器直接把水平不够的新手挡在了门外 , 通过解决出问题的人是方式,从根本上解决了C++的问题 。
我第一次用rust写个小程序就跟编译器较了一天的劲 。它的缺点就是学习难度太大,语言太小众 , 库太少 , 很多轮子都要自己造 。但是随着微软之类的大厂使用,相信之后发展会比较好,新项目如果需要C或者C++可以优先考虑rust 。
Java
我现在主要也是一个Java程序员,对于Java这个语言我并没有什么很特别的感觉 , 配套设施完善,什么都能干,体验非常赞,就是内存占用有点难看 。想搞安卓考法的必修 , 阿里有大量的服务器项目使用Java 。
唯一想吐槽的是gradle这个构建系统 , 版本问题搞得很头疼 。
JavaScript
js是前端的必修课,没得?。欢鴑ode让js也万能了 。用node做过后端项目后 , 感觉动态类型语言还是不太适合,由此带来的低级错误很多,虽然可以用typescript解决,但是最终还要编译成js,无法直接调试 。由于没有原生的多线程支持,利用cpu也只能通过开多个进程的方式 。小项目的后端做着玩还可以,大点的还是考虑Java或者是go吧 。
Lua
Lua是极其轻量的语言,语言特性接近js,runtime非常小 。作为一个脚本语言,性能出色,内存占用低,很适合各种嵌入式设备或者插件系统 。

推荐阅读