我批评的是那位不懂装懂,发表有害言论。—— 抓住“一个”我懂的点,哪一个?无限放大,何放之有?你这为那位开脱为哪般?我回了两次,批评那位的两个观点,那位满地打滚,“语文能力”、“理解能力”的胡搅缠,嘴脸丑陋,令人不屑。
你其余的发言是言之有物的,态度是好的。来讨论:
1 新的Cpper也好,新的Cer也好,哪种语言的新人加入,也会写出奇怪的BUG。这是常识,新人写的BUG最难搞。听说过“Cargo Cult Programming”吗? 再者新“加入”的人一部分学不会退了,加而不入,这太正常了。
2 语法,syntax,指得是表达形式,智能指针不是语法,是基础设施。智能指针搞出的内存泄漏,相比C语言里满天飞的泄漏或者goto Clean,一个是解决了基本问题后的泄漏,一个是起步就泄漏。你说哪个好呢?何况智能指针是11的,之前就有auto_ptr,距今已经12年了,又何新之有?对C的程序员来说,哪有旧的东西?
3 lambda表达式,在非必要的情况下,每个函数里搞一两个的人,你让他写C,他要么把入参搞到一、二十个,要么一个函数写到500行。是人的问题,不是语法的问题。
局部变量和形参混在一起,不是降低了封装性,是增加了耦合性。因为入参加中间状态,产生了一个子模块,写的人偷懒了不想再写一个子函数,可能中间态太多,也可能压根理不清楚。硬币的另一面是,他起码有良心用lambda标记出来,这里是一个子逻辑。相比洋洋洒洒500行C程序,开头声明250个变量(必须在开头!),读的过程中一直往前滚动,那才是对人类尊严的践踏。
即使是这种不合格的用法,500行的代码,分成几个lambda也能方便重构,而C就很难了。我碰到不合适的Cpper写的长函数,有一个重构技巧,就是把较长的函数里,分成几个lambda,不断的消除捕获的变量,只留形参,能编过后,就可以提出去了。
至于你说的“大量新语法对大部分coder没有带来生产力提高……”。
1 大量:按你被lambda困扰的程度,你这刚到11。解决方案是认真搞懂用到的点,打造一个可靠Cpp子集。
2 新: 11的,不新。
3 大部分coder没有带来生产力提高:传回调函数时使用lambda,使std::function比函数指针好理解,使用可计数对象配合编程框架,在游戏领域、图形领域,基本是消除新手95%的内存泄漏,—— 其它的就不举了,不知你用过没。
“反而带来阅读和理解代码的难度”
一般来说,对看不懂的东西,提倡“见贤而思齐,见不贤而自省”。我看有的C程序员是“见贤而责,贤而不贤也!”,“贤之不易,何而为贤!”,“何贤之有,我自为贤!”
【 在 toutouqi 的大作中提到: 】
: 不能抓住一个你懂的点就无限放大。没有人否认cpp的每一个新语法都有其用武之地,熟练的cpper用应该没什么问题。但总还是不断有新人加入cpp队伍的,当新语法被不太熟悉cpp的cpper拿来用的时候,除了语法难看懂,各种bug也仍然不可避免。比如智能指针,仍然可以搞出奇怪的内存泄露,比如lambda函数,每个成员函数里给你搞一两个,形参和引用的成员变量混用,严重降低了函数代码的可读性和封装。大量新语法对大部分coder并没有带来生产力的提高,反而带来阅读和理解代码的难度,这才是大家吐槽的点。
--
FROM 61.185.159.*