西西河

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

共:💬71 🌺370
分页树展主题 · 全看首页 上页
/ 5
下页 末页
  • 家园 随便说说c++的这次吵架

    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的个人网站崩了,他都没法从后台登进去升级系统配置。

    待续。

    通宝推:PCB,笑不拾,文化体制,
    • 家园 C++的应用场景越来越模糊了

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

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

    • 家园 歪一下楼, 我是怎么学 C++的

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

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

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

      一个是练习的少.

      下面讲一下我怎么学.

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

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

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

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

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

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

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

    • 家园 能否请楼主悠闲地把这个系列续完?

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

      • 家园 就这个帖子而言,想说的说完了

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

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

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

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

        • 家园 我是用C起家的

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

    • 家园 正好问一下行家

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

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

      谢谢.

      • 家园 我不是行家,尤其是对 C++ 而言,没有行家这个概念

        不过我已经写了很久的 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一词基本上不可能产生这种理解障碍。中间损失的脑细胞和自信心完全是翻译的锅。

        • 家园 TCPL第四版可以看

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

        • 家园 先学MFC真是灾难啊,还好爬出来了

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

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

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

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

          • 家园 也不能这么说吧

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

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

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

        • 家园 可以再请教一下么?

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

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

          多谢了.

          • 家园 你说得对

            我其实是想说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的封装好多了)。

            • 家园 MFC上一大堆宏只能靠开发环境生成、维护

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

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

              通宝推:桥上,
              • 家园 没错, Borland的工具很好,他基本上是被微软坑死的

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

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

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

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

                最终撑不下去了。

分页树展主题 · 全看首页 上页
/ 5
下页 末页


有趣有益,互惠互利;开阔视野,博采众长。
虚拟的网络,真实的人。天南地北客,相逢皆朋友

Copyright © cchere 西西河