Stage1st

 找回密码
 立即注册
搜索
楼主: why3000

[科技] 美国国家安全局:建议停止使用 C 和 C++

[复制链接]
     
发表于 2023-1-23 13:59 | 显示全部楼层
ESAKA!!!! 发表于 2023-1-23 07:04
纯编程新手,我本来以为c++就算难的那一批语言了呢

学c++容易产生一种我可以了的幻觉,rust编译器会一巴掌扇在这种人脸上

—— 来自 S1Fun
回复

使用道具 举报

发表于 2023-1-23 14:03 来自手机 | 显示全部楼层
Hydro 发表于 2023-1-22 21:29
都想停,都说要停,都停不了

干掉ie都用了多长时间,c这种更基础的
回复

使用道具 举报

     
发表于 2023-1-23 14:08 来自手机 | 显示全部楼层
ESAKA!!!! 发表于 2023-1-23 07:04
纯编程新手,我本来以为c++就算难的那一批语言了呢

c艹 难得多



—— 来自 Xiaomi Mi 10, Android 12上的 S1Next-鹅版 v2.5.4
回复

使用道具 举报

     
发表于 2023-1-23 14:25 | 显示全部楼层
RIIR 简直是邪教组织了
回复

使用道具 举报

     
发表于 2023-1-23 15:11 来自手机 | 显示全部楼层
c艹本身就是屎山,而且c艹委员会有不可推卸的责任,别把c扯上,而且linux内核用的c是gcc扩展过的

—— 来自 Xiaomi Mi 10 Pro, Android 12上的 S1Next-鹅版 v2.1.2
回复

使用道具 举报

     
发表于 2023-1-23 15:22 | 显示全部楼层
kztp 发表于 2023-1-23 11:52
策略问题,你的代码有100个错误,c艹在编译期只会报5个错,你处理掉就能跑起来了。剩下的那95个你爱弄不 ...

那rust是不是编一次比cpp还要慢很多?
回复

使用道具 举报

     
发表于 2023-1-23 15:46 来自手机 | 显示全部楼层
想提高难度可以学习c++模板

—— 来自 OnePlus LE2120, Android 13上的 S1Next-鹅版 v2.5.4
回复

使用道具 举报

     
发表于 2023-1-23 15:51 来自手机 | 显示全部楼层
henvelleng 发表于 2023-1-23 15:11
c艹本身就是屎山,而且c艹委员会有不可推卸的责任,别把c扯上,而且linux内核用的c是gcc扩展过的

—— 来 ...

C是另外一坨屎山,这里说的内存安全问题,就是C的问题

—— 来自 BlackBerry BBF100-4, Android 8.1.0上的 S1Next-鹅版 v2.1.2
回复

使用道具 举报

     
发表于 2023-1-23 17:06 来自手机 | 显示全部楼层
kztp 发表于 2023-1-23 11:52
策略问题,你的代码有100个错误,c艹在编译期只会报5个错,你处理掉就能跑起来了。剩下的那95个你爱弄不 ...

那Wall Werror Wl,fatal-warnings加严格lint的话呢?
回复

使用道具 举报

     
发表于 2023-1-23 17:12 来自手机 | 显示全部楼层
新的瑞拉 发表于 2023-1-23 17:06
那Wall Werror Wl,fatal-warnings加严格lint的话呢?

不会,

一是rust类型系统不一样

其次rust会转换成自己的ir,然后跑miri/chalk之类(可以看出简化版的定理证明器)去搜索答案



—— 来自 Xiaomi Mi 10, Android 12上的 S1Next-鹅版 v2.5.4
回复

使用道具 举报

     
发表于 2023-1-23 17:46 | 显示全部楼层
Rho 发表于 2023-1-23 12:20
听起来好像C**说的这95个错误都是代码检查工具能查出来的东西啊

理论上可以但实际上很难,静态检查的准确率一直都是在挣扎阶段。毕竟c艹标准语法不会要求程序员提供一些用于检查的信息,只能检查的时候去猜,但那可是连作者自己在三个月后都说不上是要干嘛的源代码啊,哪有这么容易猜。
猜都猜不对的话,后面的检查只能说是巧妇难为无米之炊了。
回复

使用道具 举报

     
发表于 2023-1-23 17:51 | 显示全部楼层
はちたや 发表于 2023-1-23 15:22
那rust是不是编一次比cpp还要慢很多?

具体性能数据没研究过,但我觉得不好说,其实c艹在后期一直有加一些内存安全相关的特性,什么unique_ptr,share_ptr之类的,有一点想要补锅的意思在里面。
这种为了保证兼容性而后加的新特性对编译器来说不见得是什么能轻松处理的内容。
回复

使用道具 举报

发表于 2023-1-23 17:51 | 显示全部楼层
rust 那个let 语法真的很恶心,现代语言我最喜欢c井,可惜只有微软系用这个比较多
回复

使用道具 举报

     
发表于 2023-1-23 18:08 | 显示全部楼层
rust看理念介绍的时候,真的会有一种“对啊,写代码就应该这样把东西想清楚写清楚,不然都不知道是写代码还是写bug”
但怎么说呢,实际操作的时候总会有因为这样那样的原因而有这种时候——“我qnmlgb的老子就想跑起来,谁tm的管你这些jb特殊场景,我连输入参数检查都不想做。你tm的别再这些细枝末节的地方搞官僚主义卡老子”
回复

使用道具 举报

     
发表于 2023-1-23 18:28 来自手机 | 显示全部楼层
aeplantim 发表于 2023-1-23 17:51
rust 那个let 语法真的很恶心,现代语言我最喜欢c井,可惜只有微软系用这个比较多 ...

let 语法来自ocaml啦,rust某种程度更像haskell和ocaml私生子弱化版

—— 来自 Xiaomi Mi 10, Android 12上的 S1Next-鹅版 v2.5.4
回复

使用道具 举报

     
发表于 2023-1-23 18:28 | 显示全部楼层
醒醒,NSA都这么说了条件反射难道不应该是NSA已经在rust编译器里塞了底层后门了
回复

使用道具 举报

     
发表于 2023-1-23 18:39 来自手机 | 显示全部楼层
C#在OOP方面真的是最接近完美语言了,就是生态不太好,有 gc 没法写太底层的东西

—— 来自 Sony XQ-BT52, Android 12上的 S1Next-鹅版 v2.5.4

评分

参与人数 1战斗力 +1 收起 理由
茶卡特尔 + 1 刚想怎么没人提c#,写c#是真的开心.

查看全部评分

回复

使用道具 举报

     
发表于 2023-1-26 00:21 来自手机 | 显示全部楼层
给当年做的字幕引个流

【自翻CC字幕】Rust语言与系统编程的未来-哔哩哔哩

—— 来自 OnePlus HD1900, Android 13上的 S1Next-鹅版 v2.5.3
回复

使用道具 举报

     
发表于 2023-1-26 08:28 来自手机 | 显示全部楼层
被邪恶的螃蟹脑控了(Rust吉祥物)
回复

使用道具 举报

     
发表于 2023-1-27 01:11 | 显示全部楼层
本帖最后由 御坂MKII 于 2023-1-27 01:22 编辑
YoumuChan 发表于 2023-1-23 12:37
golang应该没啥内存安全性问题吧,主要问题可能是强行不用channel的时候有data race?我感觉golang最优雅 ...

不会,内存泄漏之类的问题该有的都有。channel 确实很好,但是其他地方太破了(

immutable 甚至只能在注释里提醒,在大项目里很难做到干净的明确某个成员是 immutable 的

而且内存这里,其实小对象造成的 gc 压力也很容易遇到。但是 golang 出于自己要维护内存的原则。几乎没放出来一个好用的 api 来让人自己管理内存。简单的对象的回收再利用也做的很简单。

提到泛型这里,最近抠性能的时候发现了个惊人的事实,目前利用泛型实现的还算实验性特性的 Sort 比以前基于 interface 的 sort 能提速一倍不止。我看了下源码,在 go1.19 里,两者实现也都是 pdq sort,除了基础的 swap, compare 分别用了泛型和 interface+传参 cmp function 以外,算法主体已经完全一致了,这就能差出一倍的差距 要不是因为写简单验证的时候发现比 c++ 的经验速度慢了好多,都没注意过这个问题。然后又爬了爬 golang 的 issue 发现换 pdq sort 都是 go1.19 才换的 然后我就明白了一个事,go1.18 之前,除非给对应的类型实现 pdq sort 来绕开使用 interface 的可能性以外, go 无法得到和其他语言同样的排序性能
只能说这破语言除了 channel 以外自己给自己挖坑的地方实在是太多了,真要抠的时候就会发现可能需要自己亲自上了。interface{} 真的是个弱智玩意儿

评分

参与人数 1战斗力 +1 收起 理由
zornlemma + 1 感谢分享go黑料

查看全部评分

回复

使用道具 举报

发表于 2023-1-27 01:47 来自手机 | 显示全部楼层
本帖最后由 根正苗红 于 2023-1-27 02:03 编辑
kztp 发表于 2023-1-23 17:51
具体性能数据没研究过,但我觉得不好说,其实c艹在后期一直有加一些内存安全相关的特性,什么unique_ptr, ...

那些c++11加的玩意都是10年前的东。况且这些都是应用层面实现,代码都给你了。不需要大改编译器。没啥补锅的意思,就是给你个标准实现。用不用随你。你不愿意用std的自带的可以不用,也可以就自己造轮子。给你自由就得承受自由的代价但我加了garbage collection你就没的选喽(看看隔壁的C#和Java)。
就算需要编译器支持的特性,反正在msvc下编c++20和c++11是感觉不错啥速度差别。
回复

使用道具 举报

     
发表于 2023-1-27 10:07 | 显示全部楼层
回复

使用道具 举报

     
发表于 2023-1-27 10:16 | 显示全部楼层
本帖最后由 oyss 于 2023-1-27 10:19 编辑

就是不要内存安全才用的c,以前搞过热补丁,中间件内存管理,虚拟机之间通过共享内存通信的协议。不能随便搞内存还弄不了,代码段的内存都要运行时给你A了,还到处是直接嵌汇编的代码
回复

使用道具 举报

     
发表于 2023-1-27 10:30 | 显示全部楼层
说起来之前那个啥啥兵棋推演的新闻很火的时候还去查了一下那个新空射巡航导弹,其升级计划赫然写着改为C++
回复

使用道具 举报

     
发表于 2023-1-27 11:08 来自手机 | 显示全部楼层
那边说的是换rust挡c/cpp系的写程序的内存漏洞利用,离什么国家安全导弹安全还差五十条街。

—— 来自 HUAWEI NOP-AN00, Android 12上的 S1Next-鹅版 v2.5.2-play
回复

使用道具 举报

     
发表于 2023-1-27 11:51 来自手机 | 显示全部楼层
oyss 发表于 2023-1-27 10:16
就是不要内存安全才用的c,以前搞过热补丁,中间件内存管理,虚拟机之间通过共享内存通信的协议。不能随便 ...

C的问题不是可以用非内存安全的特性,而是混淆了数组和指针。但凡有单独的定长数组类型(类似std::array)和变长数组类型(类似std::vector)而且完全和指针区分,也不会有那么多内存安全问题。

—— 来自 BlackBerry BBF100-4, Android 8.1.0上的 S1Next-鹅版 v2.1.2
回复

使用道具 举报

     
发表于 2023-1-27 12:01 来自手机 | 显示全部楼层
引用第55楼Rho于2023-01-23 12:20发表的  :
引用:kztp 发表于 2023-1-23 11:52策略问题,你的代码有100个错误,c艹在编译期......

@Rho
除非检查工具发现问题强制不能编译或者运行,单纯提示是没用的
像IDEA写Java会提示对象可能为空的地方,不少人是完全不理这些提示的,除非运行中抛了空异常才会去处理

----发送自 Sony XQ-AU52,Android 12
回复

使用道具 举报

     
发表于 2023-1-27 12:08 | 显示全部楼层
有些搞不懂内存安全的还是不要做程序员了。
你这写出来的代码出事了你背锅吗?
有些关键地方出错了要命啊
回复

使用道具 举报

     
发表于 2023-1-27 12:46 来自手机 | 显示全部楼层
C里面什么字符串用NULL表示结束,数组用NULL表示结束之类的,都是因为没有正确的数组类型导致的

—— 来自 BlackBerry BBF100-4, Android 8.1.0上的 S1Next-鹅版 v2.1.2
回复

使用道具 举报

     
发表于 2023-1-27 12:50 来自手机 | 显示全部楼层
r_ex 发表于 2023-1-27 11:51
C的问题不是可以用非内存安全的特性,而是混淆了数组和指针。但凡有单独的定长数组类型(类似std::array ...

数组和指针没那么大关系,只是存在数组到指针的隐式类型转换
数组这里问题最多的是 c/cpp 都不做强制的边界检测,即使是 std::array 和 std::vector 也是可以随便越界读和写的
内存安全更多时候问题是分配在堆上的内存不好管理,复杂的执行流下很容易出现忘了 free 或者多 free 的情况,这个 c 下比较麻烦,cpp 如果坚持 RAII,多用现代 cpp 的写法基本都能规避

—— 来自 Sony XQ-BT52, Android 12上的 S1Next-鹅版 v2.5.4
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|上海互联网违法和不良信息举报中心|网上有害信息举报专区|962110 反电信诈骗|举报电话 021-62035905|stage1st 沪ICP备13020230号-1 沪公网安备 31010702004909号

GMT+8, 2023-2-4 08:16 , Processed in 0.045332 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表