C++的批判

1、C++批判与编程语言的未来 本文深入探讨了C++编程语言的现状及其面临的挑战,分析了其复杂性和局限性,并与Java、Eiffel等新兴语言进行对比。同时,文章还讨论了编程语言在软件开发中的角色以及未来发展趋势,为开发者选择合适的编程语言提供了参考。 阅读详情

1,typedef不必要?

a,typedef提供了一层间接,面向对象语言中,接口掩盖了运行时不同具体类型间的差别,而typedef掩盖了编译时不同类型间的差别,却又不丧失类型安全性
b,一般语言只能返回“值”,而typedef提供了返回“类型”的能力,这是模板元编程不可或缺的机制,除非模板元编程眼下也是不必要的

2,导入

在不同地点分别对#include,private成员放在头文件中,inline函数也放在头文件中进行了批判,实际上原因只有一个:C++不是平台,它没有二进制标准,它编译后成为本地代码,丧失了一切类型信息;只有解决了这个问题,才能解决跟分发重用导入相关的各种问题

3,引用是多余的?会被破坏?

a,资源释放问题引用比指针更明确,即提供原始对象一方负责释放资源,而一旦用指针做接口参数,就需要约定谁来释放资源
b,空引用在well-formed的程序中是不存在的,因为产生它的唯一方式是提领空指针,而提领空指针是未定义的行为,程序很快就会出错,而不是像被破坏的指针一样,有些运算出错,有些不出,有时出错,有时不出

C99也加入了对引用的支持

4,直接重复继承

C++缺乏Eiffel拥有的“直接重复继承”机制,但假如有的话,语义是什么呢?没看过Eiffel,不懂

5,多重继承

论述较为精辟,对多重处理的继承是C++的软肋,Java禁止了多重实现继承,但提供的“单实现继承+多接口继承+内部类”却又缺乏灵活性和直观性

6,内部类破坏面向对象?破坏复用性?

有失公允,除非面向对象排斥面向接口,复用仅止源代码复用;1,内部类提供更好的封装性;2,内部类经过简单包装后可以以可执行代码的形式提供面向接口的复用,一个例子是“List Collections.unmodifiedList(List)”,可用内部类优雅的实现(不知实际实现如何)

7,virtual/override

C++与C#的做法给了基类作者巨大的责任,而这些本应子类作者承担;包括C++里的虚基类,子类的变化迫使父类作出改动

8,虚拟类型

文中说C++只提供了参数化类,没提供虚拟类型,可从所举的虚拟类型的例子来看,似乎用前文所鄙视的typedef即可完成,不知是否如此.

9,束缚多态

在C++里一般称为模板参数约束,正考虑加入下版标准;但如果只是用在书中所举例子,模板参数约束为实现某个接口,那么用接口做为参数就可以了,为什么还要泛型呢?泛型表达了一种Concept,泛参检查也应该为Concept Check,而不是Type Check

10,访问控制

Eiffel对子类访问权限不加限制只能算是一个特性,未必是优点;基于对复用的两种不同理解和侧重,C++和Eiffel选择了对待子类的两种不同态度;对C++私有继承批评时所举的例子并不恰当,造成问题的根源是强制转型,而不是私有继承

11,展开对象

对“.”和“->”的批评太孤立了,实际上“->”是可重载的操作符,提供了一层间接,利用这层间接可以做很多事情:资源管理,以包容的方式获得继承的便利(自动“拥有”被包容对象的方法)等等;Eiffel提供了“展开对象”,不知具体语义如何

12,直接重复继承

翻到这里才看到了Eiffel中直接重复继承的一种用处:原来是为了在子类中调用父类同名方法;随着Precursor加入语言,这种用法也可以被抛弃了

13,抗变与协变

返回值协变似乎没多大问题,参数抗变似乎也没多大问题,问题在于参数协变;Eiffel提供了Current和like来解决,C++只能期待受束泛型了

14,强制针对接口编程

作者认为父类中的public成员在子类中重定义时改为protected或private会带来协变问题,其实只要重定义函数的语义正确,也没什么;而且这种变化会带来另外一种效果:强制针对接口编程;因为此时你的客户程序员只能通过父类来引用你的子类对象才能访问重定义的成员

15,垃圾收集

还是那些话题,还是那些论调,还是对内存外的资源管理避而不谈;难道不能“析构函数+栈对象+堆对象垃圾收集”?C++只不过缺省缺少“堆对象垃圾收集”,智能指针还能撑一会,Java和Eiffel则缺少“栈对象+析构函数”

16,契约式设计与CORBA IDL

作者认为CORBA IDL不支持契约式设计是一个缺陷,可我从来不敢在我的DCOM,RMI,.Net Remoting组件中使用断言,包括最初的socket server;这可是暴露在网络环境中啊,违反前置条件是要抛异常的啊;WebService稍好一点,明确定义了异常处理,有中间件支持

 
手动编译OpenSSL 1.1.1c:版本选型、配置参数与跨平台避坑指南 在工程实践中,基础加密库的编译与版本管理往往是项目稳定性的分水岭。OpenSSL作为广泛使用的安全通信库,其LTS版本1.1.1系列至今仍被大量嵌入式系统、旧版应用和私有协议栈依赖。理解动态库与静态库的构建差异、掌握configure参数与交叉编译环境配置,是复用和交付可靠二进制组件的基础能力。通过源码编译,可以精确控制头文件、库文件路径和运行期SONAME,避免系统级多版本冲突导致的API不兼容问题。本文以OpenSSL 1.1.1c为例,梳理从版本选型、环境准备到make install的完整流程,并针 阅读详情

相关推荐

大语言模型在构建UNSPSC 分类数据中的应用

UNSPSC 是联合国标准产品和服务代码。本文研究如何利用大语言模型生成分类系统的分析

姚家湾博客 1878

C++批判的批判

1,typedef不必要?a,typedef提供了一层间接,面向对象语言中,接口掩盖了运行时不同具体类型间的差别,而typedef掩盖了编译时不同类型间的差别,却又不丧失类型安全性b,一般语言只能返回“值”,而typedef提供了返回“类型”的能力,这是模板元编程不可或缺的机制,除非模板元编程眼下也是不必要的2,导入在不同地点分别对#include,private成员放在头文件中,

切尔斯基 4619

数字化转型是什么?核心又是什么呢?

01到底什么是数字化转型? 这时候你或许要问笔者了,既然你说使用新兴技术不是数字化转型,那使用新的商业模式总该是数字化转型了吧?你比如阿里巴巴,作为我们中国人最熟悉的开展电子商务的公司,它可以说是新的商业模式最大的开创者了:阿里巴巴是世界上最大的零售商,却没有任何一家实体店和任何库存;再比如优步(Uber),我们非常熟悉的一个线上打车平台,它可以算是世界上最大的出租车公司了,但是它不拥有一辆出租车。还有近些年来,我们经常使用的的旅游房屋租赁社区爱彼迎(Airbnb),它可以为消费者提供多样的住宿信息..

weixin_58342023的博客 4043

C++批判

C++批判...

u013066840的博客 455

如何运用好DeepSeek为自己服务:智能增强的范式革命 || 目录

1.1 认知增强的三次浪潮1.2 DeepSeek认知增强模型1.3 人机认知耦合协议1.4 认知增强的数学基础。

𝓓𝓸𝓶𝓲𝓷𝓪𝓽𝓲𝓷𝓰 𝓐𝓵𝓵 𝓣𝓱𝓲𝓷𝓰𝓼 1226

AUTOSAR RTE配置实战:从ECU分区到Task映射的完整指南

本文提供了一份AUTOSAR RTE配置的完整实战指南。从创建ECU分区、定义OS任务,到实现Runnable Entity与Task的精确映射,详细解析了每一步的操作要点与常见陷阱。文章结合配置工具界面,旨在帮助开发者高效完成RTE配置,确保系统实时性与数据一致性,是掌握AUTOSAR核心开发流程的实用参考。

weixin_29228203的博客 486

C++批判系列5--继承的本质

继承的本质继承关系是一种耦合度很高的关系,它与组合及一般化(genericity)一样,提供了OO中的一种基本方法,用以将不同的软件组件组合起来。一个类的实例同时也是那个类的所有的祖先的实例。为了保证面向对象设计的有效性,我们应该保存下这种关系的一致性。在子类中的每一次重新定义都应该与在其祖先类中的最初定义进行一致性检查。子类中应该保存下其祖先类的需求。如果存在着不能被保存的需求,就说明了系统

cber的专栏 1886

具身智能:从理论突破到场景落地的全解析

具身智能(Embodied Intelligence)是人工智能与机器人学深度融合的前沿领域,其核心在于通过物理实体与环境的动态交互实现智能行为。区别于传统 AI 的 “离身性”(如语音助手仅依赖数据输入),具身智能强调 “智能体通过身体感知世界并反作用于环境”,形成 “感知 - 决策 - 行动” 的闭环。例如,能自主避障的配送机器人、可精准抓取异形物体的机械臂,均通过传感器网络与环境实时互动,在试错中优化行为策略。

LeeKumaの技术Note 2683

C++批判(1)

《C++?? A Critique of C++ and Programming and Language Trends of the 1990s》 3/E【Ian Joyner 1996】 该篇文章已经包含在Ian Joyner所写的《Objects Unencapsulated ...

chubaisheng8627的博客 125

保姆级避坑指南:在Ubuntu 18.04上搞定速腾Helios雷达驱动与fast-LIO2的完整配置流程

本文提供了一份详细的速腾Helios雷达与fast-LIO2在Ubuntu 18.04上的配置避坑指南,涵盖驱动安装、数据格式转换到建图全流程。特别针对常见编译错误和数据转换问题提供了解决方案,帮助开发者高效完成环境搭建与建图任务。

weixin_27252001的博客 115

论文翻译:2024 High-Confidence Computing A survey on large language model (LLM) security and privacy: The

大型语言模型(LLMs),如ChatGPT和Bard,已经彻底改变了自然语言理解和生成。它们具有深度语言理解能力、类似人类的文本生成能力、上下文意识和强大的问题解决技能,使它们在各个领域(例如搜索引擎、客户支持、翻译)中变得不可或缺。同时,LLMs也在安全领域获得了关注,揭示了安全漏洞并展示了它们在安全相关任务中的潜力。本文探讨了LLMs与安全性和隐私的交集。具体来说,我们研究了LLMs如何积极影响安全性和隐私,与它们使用相关的潜在风险和威胁,以及LLMs内部的固有漏洞。

CSPhD-winston的博客 1722

现代C++中单例模式的全面分析:实现、批判与替代方案

另一方面,它提供了全局可访问性,这带来了极大的便利,但也正是这种便利性,使其与全局变量的弊端紧密相连。因此,单例模式的核心定义本身就蕴含了其争议的根源:它为解决一个问题(实例控制)而引入的便利性(全局访问),恰恰是导致其最大缺陷(全局状态)的直接原因。从脆弱的手动锁定(DCLP),到标准库提供的同步原语(std::call_once),再到最终由语言本身提供保证(Meyers’ Singleton),这个过程不仅是关于一个设计模式的实现,更是关于C++语言如何让并发编程变得更简单、更安全的范例。

greenspan的专栏 1189

Android Camera MTK框架

Camera简介: 虽然前文说道Android在5.0之后就推出了Camera2 API,但是各个厂家的基本未适配,导致目前市场上大部分机型使用的仍然是Camera1 API。PS:Android 9.0 Google强制要求各个平台厂商(高通/MTK/华为等)支持Camera2,不再兼容Camera1。 ...

weixin_49303682的博客 5511

C++批判(4)

函数重载 C++允许在参数类型不同的前提下重载函数。重载的函数与具有多态性的函数(即虚函数)不同处在于:调用正确的被重载函数实体是在编译期间就被决定了的;而对于具有多态性的函数来说,是通过运行期间的动态绑定来调用我们想调用的那个函数实体。多态性是通过重定义(或重写)这种方式达成的。请...

chubaisheng8627的博客 111

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

系统性能优化实战:从基础概念到高性能代码实现

系统性能优化是提升软件响应速度、吞吐量和资源利用率的关键技术。其核心原理在于通过精准的配置调整和代码改进,解决数据库查询缓慢、内存泄漏等常见瓶颈问题。在技术价值层面,性能优化不仅能显著提升用户体验,还能降低运维成本,为业务扩展提供坚实支撑。特别是在高并发、大数据量的应用场景下,合理的缓存策略和并发编程优化尤为重要。本文基于性能调优和系统优化的实践经验,详细探讨了从环境准备到代码实现的全流程优化方案,涵盖了数据结构优化、JVM调优等实用技术,帮助开发者构建真正高性能的技术解决方案。

chubaisheng8627的博客 353

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

C++批判(3)

保证类型安全的联结属性(type-safe linkage) C++ARM中解释说type-safe linkage并不能100%的保证类型安全。既然它不那100%的保证类型安全,那么它就肯定是不安全的。统计分析显示:即便在很苛刻的情况下,C++ 出现单独的O-ring错误的可能性也...

chubaisheng8627的博客 114

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

二进制迷雾当Python在深夜开始批判C++的指针暴力

C++的指针,是编程语言进化史上的一个重要阶段,它代表了一种直面硬件的勇气。但Python的出现,象征着编程思想从“底层暴力”向“高层抽象”的文明演进。它告诉我们,优秀的语言不仅仅是机器的指令集,更应是程序员思想的清晰表达。在二进制的迷雾中,Python以其优雅和安全,为开发者点亮了一盏明灯,指引着代码世界向着更稳定、更友好的未来迈进。

NEWHEAVEN的专栏 437

C++批判(5)

继承的本质 继承关系是一种耦合度很高的关系,它与组合及一般化(genericity)一样,提供了OO中的一种基本方法,用以将不同的软件组件组合起来。一个类的实例同时也是那个类的所有的祖先的实例。为了保证面向对象设计的有效性,我们应该保存下这种关系的一致性。在子类中的每一次重新定义都应该...

chubaisheng8627的博客 116
上一篇: Thinking in Current Paradigms, Platforms, Frameworks, and Libraries
下一篇: 独孤九剑与软件开发
Image_Graphics
博客等级 码龄20年 18粉丝 52原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值