@
skywind3000 139 楼,屎麻烦一次性拉完。
> 我好心提醒你 xxx_ptr 跨二进制要挂
template<typename T>
using observer_ptr<T> = T*; // BS 亲自鼓吹(无误
你家二进制挂了?
另外我算是反应过来也许为啥不提 xxx_ptr 的另外的臭名昭著的二进制问题了,因为那个 xxx_ptr 里有个看起来冗余的设计某种意义就是专治你这种自作聪明的 ABI 小鬼不服的……
> COM 里不就是依靠 Release 代替析构保护跨二进制不同堆的析构释放冲突问题么,老衲二十多年前写 COM 时看一眼就明白了,用得你来教?你哪年学会的 COM ?写过多少 COM 相关代码啊?
所以这就是 COM 严格比这个冗余设计更傻逼的问题了。当然这肯定是故意的,因为 C 没析构这样能特别处理的东西。
也就是这种把 metadata 翻来炒去最后只剩下 ABI ……的哪壶不开提哪壶,要不是兼容 C 的破烂,COM 用起来的体验能那么屎么。人 .NET 为什么没那么拉仇恨?
> 现代程序,内存分配失败就应该 assert 了
Linux kernel:我就乐意超卖给你延迟 OOM 炸妈,不服?还是嫌弃我不是现代程序?
> 生成代码是一致的,但是我也不想到处用,为啥?
怎么就上套了呢。
说了不懂 ABI 欠扁在哪,还硬掰。
> 你觉得非要套个 unique_ptr 的套套你才舒服,我也没说你不对,但是干什么事情都头上都要顶个套套,更多人会觉得浑身不自在,就像明明没下雨,有个二百五非要穿一件雨衣在操场上跑步一样
C 厨的后遗症之一就是看得见 unique_ptr 是个套套,却强行眼瞎到 *(因为欠扁的歧义,我得指出这是个 declarator 里形式上叫做“ptr”的东西,不是 operator )这个直接写死的垃圾语法和弱鸡语言不是个各种意义上都更严重的套套。
为什么是套套?因为这种东西不配是一种。unique_ptr 好歹允许让用户自己发明其它套套,而削弱了这里的弱鸡程度,反而不具有那么明确的套套属性。
本来更一般意义上,这就是个挂到 parametric polymorphism 上实现的 unary type ctor 而已,什么大惊小怪的。
自己写不出来,非得让语言设计者替自己钦定还觉得光荣的斯德哥尔摩综合症患者,就 C 用户里特别集中,就别怪人不鄙视了。
当然 C++ 这种缝合怪也不是啥好鸟,顺手就给 ptr 加塞个&( C++/CLI 再糊了个^),也是糟粕。但是讲道理,&创建的类型还就比你*这种横竖都跳不出 object type 的破烂货特殊,本就更有资格当套套了。
> 比如 if constexpr ,可以让我的代码编译期做判断提升性能,但是我忍住没用了,改用模板和宏去模拟,为啥?
模个屁股,一个 tag dispatch 就能看清楚的东西还画蛇添足套省不了什么代码量的宏,嫌弃可读性太高了?
还是你就在口嗨连怎么实现都没想象过?
> QString 有多强,你可以学习下:
QString 还就是 GotW#几(懒得找了)里提过的 basic_string 垃圾之处的威力加强版——一坨跟实体类型无关的非必要接口乱七八糟地堆在类定义内。
放外面会死?
什么 Latin1-centric 的笑话我就不多婊了。
>
https://www.zhihu.com/question/54664311/answer/140476787> 与其说它是个字符串,还不如说它是个处理二进制数据的 buffer ,基本等同于 std::vector<char>。
什么煋……
string 的本义就是叫做 alphaset 的集合的元素能生成的序列,什么“字符”(包括 char_traits 之流)是瞎扯的,搞不好历史上就是一坨妄人对 alphabat 望文生义出来的缝合怪。
发现不了这个的真是数学基础不牢靠。
当然,也不全是用户活该。C++ vector 就是个垃圾命名,真正勉强能算上 vector 在 C++里叫 valarray 。但再垃圾,也是垃圾不过 C 把 B 里好好的 vector 硬叫成 array 开启打乱萝卜坑的妖风的。
( SSO 什么破烂的既然该答主应该也不够格纠结,略过。)
——然后,吹 QString 当“字符”串的习气比 C++的设计更加数学丈育。
> 大道至简,这个 PyStand.cpp 很简单
经典 CS 笑话:Py 能映射到“大道”和“简单”上。
(只是顺便,没特别黑你的意思,说实话我懒得看内容。)
> 又来,我跟你说了我希望尽量限制标准在 14 及以下,你完全 get 不到我的角度。
string_view 这种 C++11 子集就能实现个大概的东西都糊不会,非得像什么 QString 之流的垃圾设计风格看齐,这根本就是脑子里的浆糊问题。
真是实力不够拎不清楚怎么实现,抄个 abseil 会死啊……
> 我觉得写代码让更广泛的编译器支持我的代码的意义,比只知道无脑飙 C++ 版本更有意义。
什么无脑飙版本,你当是 Google 炒肉末吗?
C++那么多改得罄竹难书的垃圾不会举例,夏虫不可语冰还要 inline expansion 一下凑字数是不?
我教育你俩例子:lambda default capture 和 u8 literal 这俩货被 C 艹 20 改的是没法让前后代码安生的(要么条件包含,总之基本不能只写一遍兼容不用标准)。
这才是比什么版本号更确切的工业级傻逼。
但是 Qt 这种第一个 minor 版本 deprecate 第二个 minor 版本就整个把 API 干掉的明显更加十足地工业级傻逼。自行领会。
“没做过啥真实交付项目的人,说一百遍他都领会不到。”这就是正确的废话。
> 觉得恶心的话你去跟标委会那帮子鸟人提案,让他们把指针从 C 艹 下个版本里删掉啊,我乐见其成,看看他们听你的不。
脑子有坑吗,干嘛要浪费时间在糟老头子身上?(“实际深入点的经验全无”——你这是没对付糟老头子的经验的自供吧?)
虽然没法 #pragma GCC poison 是弱鸡(看,又是个 * 比 unique_ptr 严格烧饼的地方),但是退一万步也不碍着我能人肉 review 不给你过啊?
> 计算机领域很多,别总在你熟悉的那个领域里打转
又是废话。
但看得出你倒垃圾又不需要多有熟练度,阻碍你乱倒垃圾也不需要几点武力值啊?
> 所以说你从来只看得到一,看不到二三四。BasicBitmap 里,老衲前面已经给 inline `#define` 成具有 always_inline 属性的宏了,你是眼睛瞎了看不见,还是不知道什么叫做 always inline / force inline 啊?
我懒得看,不过你这样直接 UB ,半轮 review 内会被打死。
> 程序员别成天只知道代码,别满脑袋都是技术,走向社会要吃亏的,有空多了解下技术以为的人文知识,荀子曾说:“故不问而告谓之傲,问一而告二谓之囋。傲、非也,囋、非也;君子如向矣。”,看不懂的话我给你翻译一下,荀子他老人家说:“别人没有问就去告诉的,叫做急躁,别人问一个问题而告诉别人两个问题的,就叫做唠叨”。
你要多知道点人文知识就可能知道几十年前吹这个搞不好是得被查成分的。
而现代人不兴这个,其实主要就是懒罢了,犯不着对一个连“学阀”都不沾边的市井路人闹情绪。
但这不表示拦住你倒垃圾就很费劲。
ky 啊 ky 。
> 动不动就 “你看看 A 去”,“你知道 B 吗?”,生怕别人不知道他懂一般,在荀子口中都是君子为人需要避免的东西,计算机领域博大精深,谁都有不知道的东西,动不动就想教别人一下,在你小圈子里没问题,出了圈还这么着,不能教而强教,担心闹笑话。
什么荀子,过气了。
时兴点说,不懂还好为人师的,那是民科的一个子类型。
> 但是 strict aliasing 这种傻鸟设计的东西不一样,这属于当年标委会那帮子鸟人设计出来的缺陷东西
傻鸟的是把 C 抽象机当做 PDP 破烂用的过气货色。
https://queue.acm.org/detail.cfm?id=3212479明明几乎就没可能摸过 PDP 却在这种旮旯地方还杠上了,不是靠 spec 而是靠脑补出来的 model 来定义语言应该长什么样,这大约是谭浩强隔代传人 8……
你 C 甚至都不算个 PRAM(parallel random-access machine)(当然真机器也不是) ,能日字节寻址的 memory 什么时候变成优势了?
> 全部遵守的话,让那帮象牙塔里的人来用当年的标准(不用 bit_cast 这些 20 里打补丁做裱糊的东西),他们都很难写出正确的 memcpy ,这不搞笑么?
这更扯蛋。什么时候 C 保证 memcpy 的实现可移植了?在任何一种精神上——除了你自己脑补——都没有。(又不是 LISP 这么吹几个 primitive 剩下都能 derive……)
只是要可“移植”,__builtin 又不会死……
> 是不是眼红 java/clang 的优化牛逼,自己又没本事进一步优化
就是为了让没事脑补有个可以按字节寻址的不确定具体配置的地址空间这种傻逼抽象彻底滚粗可移植代码。
优化反倒是次要的事。真恶心你就该 bb 什么 std::launder ,但明显本事不大够。
> 为实践服务,不用反过来
实践不是那坨互相瞎吵但最终还是达成共识的糟老头子定义,难道还轮得到你定义了?
按你说的,你有什么把 strict aliasing 踢出标准的动议过?
> "状态机" 拷贝下来和我说,任何 API 都有不完美的地方,状态机是 OpenGL 不完美的地方
所以你这个没 CS 系统训练见识过 model 的人就是不懂什么时候该收声。
状态机为什么欠扁?不仅仅限于是 API 难用那么种表面的性质,根本上是反人类——要求人理解足够多(经常还预测不了上限)的状态之间的全局交互属性才可能精确捕获系统的演化性质。这可能于简化物理实现,但对向人阐明原理和意义 model 来说,就是半成品。(就半成品拉仇恨方面,指针满天飞的破烂和没 resolve 干净 ownership 的没事瞎依赖 GC 的废物程序是类似的其它例子。)
更深层地说,状态机之类的东西和还原论根本不搭——难以可行地证明范式或者最简形式。因此如果要当做逆向设计的终点甚至当做像模像样的理论,多多沾点炼丹伪科学的味儿。
即便是描述计算模型这样最通用的领域也一样——用状态配置描述的图灵机之流有一大坨备胎;相比之下,无类型 lambda 演算就基本上算是独一无二的,多一点太多,少一点太少——再干掉一些东西就几乎必定会失去主要的性质,而要加个保守扩展就会引入 non-trivial 的其它东西,而值得作为还原设计的终点,扩展设计的起点。
题外话:
1) 王垠批评 Lamport 还有那谁的东西有“状态机”是多余的(算是难得没在扯蛋),说白了也是类似的道理。
2) 都吹什么人理解迭代、神理解递归,我看其实是人理解递归,神棍和狗屎把递归替换成莫须有的状态还差不多。
到此还不算直接在批评 OpenGL 。但是当有比较的时候,哪个设计更加裸泳就一目了然了。
> 不要生活在真空世界里了,C++ 比你厉害十倍的人我也经常和他们交流,真的懂 C++ 的根本不会像你这么阳春白雪。
和你交流?谁啊?
或者你跟我重复一遍?不怕溢出遭天谴的话?
> 著名项目,Qt / wxwidgets ,看看他们是不是指针到处飞?
著名和质量垃圾有矛盾吗?
std::basic_string 那么弱鸡的玩意儿都找的到垫背的设计(除了从 C 引进的),也是活久见。
虽然倒是很容易甩锅“因为它们更老”。
> 图形领域的各种 3D/2D 引擎 Ogre3D / Unreal / urho3d 哪个不是飞指针
虽然没有冒犯的意思,我还是承认很庆幸我不对这方面感兴趣而不用吔屎了……
> 他们懂啊,局部用,用也是用自己实现的,看不上你 std::xxx_ptr 。
之类玩意儿么,周知的除了转进投靠 std 的 EASTL 之流,属实懂个鸡脖了。
> 系统开发领域唯一的 C++ 内核 Fuchsia
不懂装懂孤陋寡闻也别那么明显好不。
先吃个 L4 全家桶屑屑。
> 你但凡读一两个上面这类各个领域的著名项目,
但凡你批判不了所谓的著名项目有哪里妥协以及看不出下限在哪,就容易让人觉得你钦定什么著名的资格很可疑。
> Qt 解释过自己为啥用裸指针,以及他的所有权管理
很多人解释过自己为啥不用指针,或者不用 Qt ,或者鄙视 Qt 的扯蛋所有权(因为不方便看到 new 就 review 对照权限一棍子打死而成本捉急)。
当然,不是说 std 就一定比 Qt 好哪去了。前些年还有提案图形库还顺带搞进去按键输入的笑话。但是就所有权这块,除了 BS 的 observer_ptr 口水,还是别鸡蛋碰石头了 8 。
不管 Qt 怎么解释那个什么 tree ,需要人多记住特设规则的反人类的属性不会变。(这是导致不能方便打死 new 的背后的原因,但不仅 reviewer ,别的用户也被坑。)
>> Qt has its own ownership system that must be respected
Respect 包含直接不用。
就像 Rust 对付解决不了的破烂也有 unsafe 直球干掉保证这招。
> 工作上 C 艹 写的比你牛逼的人多的是
说真的,C 艹 写的不比你牛逼的,还真敢用 C 艹 嘴硬死不认怂歪理一套套,以至于我能毫不费劲一路婊到底都不太需要多过几次大脑的,还真没见过几个。