主题:随便说说c++的这次吵架 -- tom

大河奔流 导读 复 70 阅 39359

/ 5 首页 上页 下页 末页

O 随便说说c++的这次吵架 47 tom 字1569 2019-01-03 21:40:45
O C++的应用场景越来越模糊了 3 阿四 字210 2019-10-21 10:06:03
O 歪一下楼, 我是怎么学 C++的 5 nanimarcus 字929 2019-10-21 00:30:40
O 能否请楼主悠闲地把这个系列续完? johny 字51 2019-10-17 18:19:53
..O 就这个帖子而言,想说的说完了 5 tom 字369 2019-10-20 11:09:14
...O 我是用C起家的 2 johny 字232 2019-10-21 09:38:27
O 正好问一下行家 1 数值分析 字246 2019-01-25 05:04:06
..O 我不是行家,尤其是对 C++ 而言,没有行家这个概念 11 tom 字2413 2019-01-25 11:45:32
...O TCPL第四版可以看 3 假设 字73 2019-09-20 02:32:41
...O 先学MFC真是灾难啊,还好爬出来了 5 敲门 字644 2019-01-27 00:05:18
....O 也不能这么说吧 3 starkik 字336 2019-09-21 00:28:51
...O 可以再请教一下么? 3 数值分析 字439 2019-01-25 23:21:43
....O 你说得对 8 tom 字2018 2019-01-26 00:27:25
.....O MFC上一大堆宏只能靠开发环境生成、维护 9 沉宝 字296 2019-10-19 11:52:59
......O 没错, Borland的工具很好,他基本上是被微软坑死的 2 tom 字271 2019-10-20 11:19:20
2019-01-03 21:40:45
主题:4386038
tom
tom`20476`/bbsIMG/face/0000.gif`70`4684`1418`29194`正四品下:通议大夫|壮武将军`2007-11-05 22:51:37`0
1 随便说说c++的这次吵架 47

C++社区好久没有现象级的吵架了。上次是十多年前因为 Linus 爆出口。

青年才俊埃里克(Eric Niebler)经过多年的努力终于完工是std::range(),在twitter上庆贺一把,用它写个栗子生成毕达哥拉斯三元数,就是满足勾三股四弦五规律,能构成直角三角形三边的三个数组合结果。

埃里克在微软工作的时候,写了一个当时最快的regex C++解析器。后来加入Boost跟大卫混,为boost贡献了很多代码,其中静态解析库Xpress激发了神奇的基于PEG规则的解析库Spirit。曾经用Spirit实现过一组注塑机之间的二进制实时通信协议,方便得不要不要的。后来Apple要废掉object-C, 另起炉灶Swift,大卫被请去负责写swift的标准库, 他开的boost咨询公司就关门了。埃里克决定搞个大的,把安德烈那次iterator must go演讲点燃的火苗养大,扔到C++标准库里去,实现从iterator到range的现代化。

自己负责的这块C++ 2020工程现在终于完工了,地球上效率国的2025如果还继续的话,可以用上5年,埃里克很嗨森。写了博客,对蓝色小鸟宣布了一把。

另一个青年阿拉斯(Aras Pranckevi?ius)不爽埃里克的例子风格,以写了多年游戏,在自己公司也算大拿的底气,从这儿开始点了冬天里的一把火,一篇檄文,拳打modern C++,脚踢标准委员会。于是大家都不冷了,参与者的热情把Eric的个人网站崩了,他都没法从后台登进去升级系统配置。

待续。


  • 本帖 14 回复
通宝推:PCB,笑不拾,文化体制,
2019-01-03 21:40:45
2019-10-21 10:06:03
4436163 复 4386038
阿四阿四`70496`/bbsIMG/face/0000.gif`70`1143`4332`36453`从二品:光禄大夫|镇军大将军`2011-03-12 23:31:32`0
2 C++的应用场景越来越模糊了 3

语言这玩意说到底是依赖于应用的,没有应用场景的语言就会变成死语言,

过去10年间,很多C++的传统阵地逐渐被其他语言侵占,这恐怕是C++面临的最大问题。


2019-10-21 10:06:03
2019-10-21 00:30:40
4436026 复 4386038
nanimarcusnanimarcus`83408`/bbsIMG/face/0000.gif`70`82`5848`43771`从九品上:文林郎|陪戎校尉`2012-03-22 08:02:31`0
2 歪一下楼, 我是怎么学 C++的 5

兄弟是读过C++ Primer, Effective C++的.

但是兄弟都没有学好, 为什么?

一个是贪大求全, 拿书真的从头读到尾, 这是绝对错误的.

一个是练习的少.

下面讲一下我怎么学.

首先不能贪大求全, 那么我怎么知道首先学哪些呢?

你找个视频教程, 比较严肃的那种, 到那几个教学网站上找一个评价比较好的.

这种一般是教你的东西也就覆盖 20%的C++, 但是覆盖了80%的使用, 这种教程的好处就是让你知道学习哪个20%.

然后, 练习, 这种教程里的例子挨个敲一遍.

再个, C++的新的特性和新的编程范式多学一些, 其实都很好理解.

再个, 找个高手辅导以下, 我很幸运, 有个高手在一个办公室, 写C++行云流水, 经过他的教导, 给我们组写过一个C++的编程指导, 感觉自己一下上了档次.

最后一个可遇不可求, 但是前面三条你一定可以做到的.


2019-10-21 00:30:40
4435134 复 4386038
johny
2 能否请楼主悠闲地把这个系列续完?

长知识的好帖子,可千万不要太监啊。


  • 本帖 1 回复
2019-10-17 18:19:53
2019-10-20 11:09:14
4435876 复 4435134
tom
tom`20476`/bbsIMG/face/0000.gif`70`4684`1418`29194`正四品下:通议大夫|壮武将军`2007-11-05 22:51:37`0
3 就这个帖子而言,想说的说完了 5

本来只是一时兴起,想说几句话,所以只发在河里。

大家的反应,让我很惊讶。真心没想到, 这么多人再用或是用过C++,而且见解非凡。

我的收获,就像起了一个头,提起一首喜欢的歌,大伙都说我也听过,开始分享自己的经历和感触。

你要有什么有兴趣的话题,也可以起个头。


  • 本帖 1 回复
2019-10-20 11:09:14
2019-10-21 09:38:27
4436156 复 4435876
johny
johny`1275`http://johny.neo.googlepages.com/monkey_seal.gif`70`6033`1432`42100`从九品上:文林郎|陪戎校尉`2003-09-26 18:04:04`0
4 我是用C起家的 2

C++稍微自学过一点儿,读过几本书,但没怎么实际在工程中应用过,现在主要用perl和python。虽然如此,对tom兄所讲的东西还是很感兴趣,希望这个系列能完成,慢一点不要紧。


2019-10-21 09:38:27
2019-01-25 05:04:06
4389050 复 4386038
数值分析
数值分析`24513`/bbsIMG/face/0000.gif`70`202`662`6601`正八品上:给事郎|宣节校尉`2008-04-24 15:55:26`0
2 正好问一下行家 1

看来老兄是行家,正好在这里问一下

我也是VC6+MFC时代学的c++,一直没有什么机会用.如果现在想要从老古董c++进化到现代c++,跟上潮流,有什么门径(书,网站,视频,或其他资源)可以推荐么?

谢谢.


  • 本帖 1 回复
2019-01-25 05:04:06
2019-01-25 11:45:32
4389073 复 4389050
tom
tom`20476`/bbsIMG/face/0000.gif`70`4684`1418`29194`正四品下:通议大夫|壮武将军`2007-11-05 22:51:37`0
3 我不是行家,尤其是对 C++ 而言,没有行家这个概念 11

不过我已经写了很久的 C++,所以比较能心平气和接受这一点。

现在回头看,从 MFC 开始学 C++, 绝对是个不幸的事。除了早期用TC++和C++ Builder完成过课堂作业,我真正严肃意义上的使用 C++ 是从 MFC 5.0 开始的。我是从MFC 5.0开始。

MFC自己本身是一个失败的设计,官方都承认这一点,如果你知道Afx代表什么,基本上就理解为什么他是失败的设计。但是因为 Windows 的成功,和其赵家人身份,从产品来说,是成功的,所以尤其不幸。

现在回头看,即使只限定在 MFC 和 C++ 之间,MFC只有对 C++ 的虐待和滥用,没有做对一件事情。MFC 里关于 C++ 的所有设计都是错的,包括匈牙利命名法,虽然这个主观一点。

我个人认为学习 C++,最好的参考

- Bjarne的书(比如 A Tour of C++,Programming: Principles and Practice using C++ (2nd edition), TCPL很深邃,不过有点过时),所有访谈(他的所有访谈都很很深刻),和演讲录像,这些在他的个人主页上都有链接。

- 学习一下 STL, 比如 Nicolai M. Josuttis: The C++ Standard Library

- 学习一下 BOOST,Boost的文档写的很好,我个人觉得最好的是每一个库开始 rationale

- CPPCon, CPPNow,所有的PPT在github上有,video在youtube上都有。墙内微软的channel 9上有2017年以前的cppcon录像, 2018年在bilibili有。

- Twitter上关注一些CPPCon, CPPNow上的名人

以 C++ 的广度,深度和复杂度和反人类的本质,建议不要以学会 C++ 为目标。根据自己的兴趣,时间和实际需要,学一点是一点。

说 C++ 反人类,是如果把 C++ 看作人(程序员)和资源(电子系统)的桥梁,他的全部目标就是最优化资源的利用,以人付出更多为代价。Python刚好是另一个极端。做好两个一起学。Bjarne就说,一个人至少应该掌握两种计算机语言。

最后一点,学习任何计算机语言,最好用英文,主要是因为术语。翻译的书分分钟带你到沟里,而且,当你有问题的时候,你发现没法有效在网上提问。

比如我曾经很多年不明白sizeof()为什么是操作,明显是个单词不是"符号",如果一开始看英文,operator一词基本上不可能产生这种理解障碍。中间损失的脑细胞和自信心完全是翻译的锅。


  • 本帖 3 回复
2019-01-25 11:45:32
4426880 复 4389073
假设
4 TCPL第四版可以看 3

如果对C++ 11以上有一定了解,Moden Effective C++也可以考虑


2019-09-20 02:32:41
2019-01-27 00:05:18
4389178 复 4389073
敲门敲门`63495`/bbsIMG/face/0000.gif`70`2433`1446`20436`正五品下:朝议大夫|宁远将军`2010-09-24 07:40:19`0
4 先学MFC真是灾难啊,还好爬出来了 5

这个是在里面滚来滚去,洗过澡的,哈哈

我接手项目的时候对C和C++一无所知,现学现卖的,那个项目做了两年,恩,现在应该是在通信行业用了很久很久了,还在用。

先被打发去做前端,用了VC6,写了一个月吧,基本上按照前人的套路也能有模有样了,结果后端缺人,于是去写后端,还是Alpha小型机那个玩意,傻乎乎的以为差不多啊,哈哈,结果发现MFC这啥玩意啊,没有比较就没有伤害啊。

运气不错,在很短的时间内,不同的C/C++都轮了一遍,尤其是后来遇到STL,对开发的帮助很大


  • 本帖 1 回复
2019-01-27 00:05:18
2019-09-21 00:28:51
4427060 复 4389178
starkikstarkik`28435`/bbsIMG/face/0000.gif`70`21`301`2313`正九品上:儒林郎|仁勇校尉`2008-10-10 02:36:15`0
5 也不能这么说吧 3

早期主要都是windows应用开发.界面和数据库基本是主力了. 软件项目也不复杂. 界面开发和数据库对于新手来说,降低入门难度就MFC和BCB了.

有选择吗? 没有选择. 人坑很多年.写的程序一大堆.发现还是没学会C++. 哈哈

如果当初从linux起步,那C++估计玩的很溜了.


2019-09-21 00:28:51
2019-01-25 23:21:43
4389110 复 4389073
数值分析
数值分析`24513`/bbsIMG/face/0000.gif`70`202`662`6601`正八品上:给事郎|宣节校尉`2008-04-24 15:55:26`0
4 可以再请教一下么? 3

MFC是我接触到的第一个application framework (当时是这么叫的,不知道现在还是不是这个概念). 我也是从MFC4.2开始的(此处捉个小虫:MFC没有5.0版,VC++5.0配用的MFC4.2直接跳道VC++6.0配用的MFC6.0).用C++的类把windows的消息循环封装起来,还觉得挺震撼的,当时费了不少功夫学,为什么从设计上讲是错的呢?

另外为什么连匈牙利命名法都是错的呢?

多谢了.


  • 本帖 1 回复
2019-01-25 23:21:43
2019-01-26 00:27:25
4389112 复 4389110
tom
tom`20476`/bbsIMG/face/0000.gif`70`4684`1418`29194`正四品下:通议大夫|壮武将军`2007-11-05 22:51:37`0
5 你说得对 8

我其实是想说VC++5.0。我是觉得说MFC 5.0的时候有点别扭。

Visual Studio, C++编译器, COM的版本一直不一致。

MFC一开始是想做一Windows下的应用程序框架,所以一开始命名很多Afx的宏和类名。Stephen(就是那个把鲍尔默从Vista拯救出来,领导Win 7, 后来有功高震主被开的那个) 回忆说,他们一开始一直想着是怎么把 C++ 的所有特性功能都用上(那时C++还是很fancy,很酷,也没标准化)。直到项目一再延期,他们才认识到他们是在开发一个产品而不是展现语言功能。

MFC在OOP封装上是很失败的,可以说完全没有封装好,处处漏风,类之间的耦合很紧,到处是内部实现的泄露,导致一不小心就GDI资源或者内存泄漏。基本上徒有OOP的外表而没有实质。我猜C++内存泄漏的名声很大部分是MFC的功劳。估计很大一部分人第一次听说内存泄漏都是写MFC程序的时候。

MFC目标是一个应用程序框架,实际上因为功能不完整,也半途而废,最终基本是一个GUI框架。比如你说的消息传递机制,实际上只在写GUI窗口的时候用上。

而就它的实际作为GUI功能而言, WTL的设计要好的多,封装上有一致性,拥不拥有资源从命名上很清楚,实现简单,十来个header文件。google chrome 的 windows 版,大多数杀毒软件的界面,VMWare这些都是基于WTL。

匈牙利命名法错误在于把变量类型嵌入到变量命名,导致阅读困难,也难扩展(除了POD,类型缩写因人而异),而且重构也不变,把一个变量比如一开始用整型表示一个Id:int iId,后来重构到类ID后:ID iId会显得莫名其妙。

我们现在以穿越的形式,说它一无是处,不是因为吃饱了打厨子,是总结经验教训, MFC的毛病很大程度上是历史局限性,那时C++还没标准化,纯OOP的语言也没有(现在有了C#, .NET API的封装好多了)。


  • 本帖 2 回复
最后于2019-01-26 22:23:34改,共1次;
2019-01-26 00:27:25
2019-10-19 11:52:59
4435609 复 4389112
沉宝沉宝`16760`/bbsIMG/face/0000.gif`70`11`1932`20689`正五品下:朝议大夫|宁远将军`2007-04-02 19:05:16`0
6 MFC上一大堆宏只能靠开发环境生成、维护 9

人没法进去改,甚至都没法看懂,整个一个黑箱。WTL起步并不晚,但很长一段时间默默无闻估计是微软内部政治斗争的结果。

没有比较就没有伤害。拿Visual Studio同时代的上市产品Delphi比较一下,就知道MFC在封装真是一堆屎。


  • 本帖 3 回复
通宝推:桥上,
2019-10-19 11:52:59
2019-10-20 11:19:20
4435880 复 4435609
tom
tom`20476`/bbsIMG/face/0000.gif`70`4684`1418`29194`正四品下:通议大夫|壮武将军`2007-11-05 22:51:37`0
7 没错, Borland的工具很好,他基本上是被微软坑死的 2

这是一个典型的依附性公司的悲剧。

为 Windows 开发, 微软在它发布新版本时, 发布下一代的COM API, 一出来就落后。

为 Linux 开发,又挣不到钱,还挨骂。

微软一个劲的只挖人, 不打包买公司。

最终撑不下去了。


2019-10-20 11:19:20
帖内引用

/ 5 首页 上页 下页 末页