c++在公司里一般是做什么的啊

2021-08-30 20:29:04 +08:00
 zxCoder
15931 次点击
所在节点    C++
107 条回复
name1991
2021-09-02 09:58:08 +08:00
@shijingshijing intresting
koala9527
2021-09-02 10:03:01 +08:00
在嵌入式中还是有一席之地的,例如汽车故障诊断仪中解析 CAN 、LIN 通信协议消息
ipwx
2021-09-02 10:16:59 +08:00
@agagega 这倒是,我也不爱用 iostream 。特别傻逼。
ipwx
2021-09-02 10:18:24 +08:00
@shijingshijing 那毕竟是 NASA,业务其实很集中。

我是觉得人类如果要征服星辰大海,这种龟速推进宇航器肯定是不行的。SpaceX 我估计不是这种写代码的风格,那种才可能快速市场迭代。。。所以你说 NASA 这种项目管理好不好?好也不好。。。
ipwx
2021-09-02 10:20:29 +08:00
@shijingshijing 就这么说吧。按照我的理解。为什么写航天器的代码这么局限?大概是因为上天的芯片太弱,给犯错边界太窄了(包括发动机也是),所以才容易出事。

为什么上天的芯片太弱?整体科技水平还不够强的芯片不出错。
----

这是这个时代的局限性,我觉得也挺对。但是我也盼望将来上个天和出门打个出租车一样简单,那个时候的写航天器代码一定不会是现在这样了。
wangxn
2021-09-02 10:52:54 +08:00
@ipwx 航天试错的成本太高,虽然火星车可以升级软件,但一开始就写好写正确更合适
ipwx
2021-09-02 10:54:44 +08:00
@wangxn 嘛,所以才需要这么搞。

如果真有一天没有多大试错成本,或者这种慢吞吞的推进速度实在太慢了,那肯定就不会这么写了。
shijingshijing
2021-09-02 11:16:40 +08:00
@ipwx

SpaceX 毕竟刚刚出大气层,还没遭受火星上各种宇宙射线,各种高能粒子轰炸,Elon Musk 本身把安全性看的也不高,成本和快速迭代占了较高的优先级,所以 Falcon 初期会各种炸,直到迭代出一个稳定的版本,NASA 经过了火箭,载人,登月,火星等各种毒打,思路是稳定优先。所以才会有 SpaceX 用 x86 来搞,NASA 坚持用 Radiation Hardened CPU,同样 Tesla 的车和丰田的车也可以类比。

外太空有很多其他因素要考虑,温差大(零下几百度到零上几百度),震动大,辐射大要防 SEU 处理,还要尽可能省电,优先保证安全性,还要绝对的稳定,还要做 N 多冗余设计,这么多东西要考虑,整个系统设计思路跟地球上其他系统完全不一样。

当然,随着发射成本的降低,现在也有把 HP 的高性能计算集群发射到空间站进行就地处理的实验了,好像已经有初步的结果,不知道没经过上述处理,只是简单的做 ECC 是否能保证结果的正确性。
shijingshijing
2021-09-02 11:20:46 +08:00
@ipwx

芯片不是太弱,性能根本不是优先考虑的选项,首先要考虑的就是尽可能不出错,当前芯片性能完全是过剩的。但是地球上普通的芯片是不能直接拿去用的,需要定制耐高温,抗辐射等特殊设计的 CPU 。

https://en.wikipedia.org/wiki/RAD750
CRVV
2021-09-02 11:37:01 +08:00
@ipwx
从另一个角度来看这个问题,写 Linux 内核也不让用 exception template iostream 这些东西,这不是 NASA 才有的局限。而且很显然 Linux 内核的局限更严格。

C++ 本来就有很多种用法,可以当稍微多一点功能的 C 来用,也可以当随便写 usafe 的 Rust 来用。
NASA 这么规定很可能只是因为技术负责人和 Linus 有相同的观点而已。
Caturra
2021-09-02 12:03:39 +08:00
@CRVV 我寻思 Linux 内核也不是 c++写的,根本用不了。不过假设可以用,感觉内核社区也不屑于用这些特性
leven87
2021-09-02 13:14:07 +08:00
跑在嵌入式设备上的训练模型
ipwx
2021-09-02 13:32:08 +08:00
@shijingshijing 我说的“太弱”也包含了“不能在太空稳定运行”这件事。

@CRVV Linux 内核不用 exception / iostream 是因为内核态上面的操作太奇妙,以至于不能用这些。可以理解。但是内核存在的意义就是让别的程序能够用 exception / iostream 这些高级玩意儿,更快开发程序不是么 233

至于 template 。那主要是 Linux 觉得 C++ 不利于这么大接近硬件的项目去兼容“傻逼程序员”。

其实软件工程从一开始就是试图用更高层的抽象去封装更复杂的显示细节。只有封装了才能让更“傻逼”的程序员更快的出活。内核就是干这事的,对于内核不能用 C++ 我觉得非常非常可以理解。要我说,用 C++ 也不过是权益之道,如果将来有一个高级抽象,可以有 C++ 的(执行时间)可靠性和 Java/C#(程序开发)可靠性,我举双手双脚赞成。
----

@shijingshijing @CRVV 所以我的论点倒不是说 C++ 多牛逼,大家一定要用 C++。而是觉得在 C++ 和 C 之间,C++ 提供的东西更多,理论上更容易出活。这个论调肯定没问题,不然游戏引擎为啥不用 C 写而用 C++ 写是不是? C++ 开发速度 > 砍掉很多东西的 C++ > C 这是客观事实,不然 NASA 为什么不用裸 C 呢?

只是感叹这种抽象和硬件条件(包括物理学、发动机之类的制造水平)还不足以让星辰大海的征途一路通畅、高效快速前进罢了(叹息)
ipwx
2021-09-02 13:33:57 +08:00
@shijingshijing

> SpaceX 毕竟刚刚出大气层,还没遭受火星上各种宇宙射线,各种高能粒子轰炸,Elon Musk 本身把安全性看的也不高,成本和快速迭代占了较高的优先级
-----

事实上我觉得这才是快速进入太空时代必要的。NASA 这种慢吞吞的风格才是权宜之计。
shijingshijing
2021-09-02 14:03:27 +08:00
@ipwx

其实软件工程从一开始就是试图用更高层的抽象去封装更复杂的显示细节。
---
这一点你说的没错,事实上从抽象这个功能来讲,C++既需要做抽象,又要放不下底层,还要兼顾各种特性,于是造成了本身无比的复杂。现在普遍引入了 MBSE,基于 UML/SysML 在更高层级上建模,然后直接生成 C 代码,最终编译成机器码直接执行。这种模式已经是大的趋势了。UML/SysML 专门负责抽象,C 负责底层,就这样两层就够了。所以这样看,C++就没什么意义了,两头兼顾两头都做不好。这也注定了即使用 C++,也是在某个领域某个模块(比如图像视频处理)非用不可的情况下,才会使用,而且限制及其严格。

还有就是 NASA 并不慢,一套系统不是只要搞软件就能 run 起来的,在软件上面还有更高层的系统级的考量。基本的飞行系统架构,最顶层是飞行器系统,然后分解为推进子系统,动力控制子系统,环境控制子系统,电气子系统,电子子系统等等,这些子系统里面再进一步细分为机械模块,硬件模块,软件模块等模块,所以至少是三个层级。比如推进子系统,机械模块分为发动机喷嘴,燃料阀门,点火装置,压力检测等子模块; 硬件模块对应有发动机喷嘴控制器,燃料阀门控制器,点火装置控制器,压力检测传感器等硬件设备;然后才是运行在这些控制器里的软件模块。所以整体是一个非常庞大的系统,不止一个 CPU,不止一种 CPU,不像做个 App 什么的打开 IDE 就能写。

NASA 的系统工程和软件工程都是一流的,很多软件领域的概念和方法都是由 NASA 或者其他航空航天巨头首先提出,然后才慢慢引入到软件领域的,特别是测试领域,比如 MC/DC 。Elon Musk 纯粹是莽,没把安全性放在首位,如果一定要类比,我觉得 NASA 是传统类型的软件厂商,SpaceX 是互联网厂商。
CRVV
2021-09-02 15:46:18 +08:00
@Caturra
这里有个因果关系的问题,因为 Linus 不喜欢 C++,所以内核才不用 C++。他不喜欢 C++ 的原因当然是 C++ 比 C 多的那些功能。
另外 Linux 内核已经开始用 Rust 了。
rainfd
2021-09-02 16:08:37 +08:00
cuda
mangohaoming
2021-09-02 17:49:01 +08:00
图像处理
WJackson
2021-09-02 17:54:42 +08:00
视频处理
secondwtq
2021-09-02 19:44:10 +08:00
number-none.com/blow/john_carmack_on_inlined_code.html John Carmack on Inlined Code - Jonathan Blow's home page

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/798919

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX