c++的今天,这次c++大会的内容太水了.
为什么是c++.
序号 | 理由 |
|---|---|
1 | 低成本高抽象 |
2 | 低级访问,甚至汇编 |
3 | 应用领域广 |
4 | 高可移植 |
5 | 更好资源管理 |
低成本高抽象:
序号 | 特征 |
|---|---|
1 | 用户定义类型 |
2 | 类型模板 |
3 | 泛型算法 |
4 | 别名类型 |
5 | 推导类型 |
6 | 编译时自省 |
7 | 运行时多态 |
8 | 异常 |
9 | 决定性析构 |
用户定义类型
内置类型:强大,有表现力
可用基本类型,用户定义类型干任何事
程序员可定义类型:基本算术类型(重载操作符),对象指针,函数指针.
不强加编程范式.但有:过程,基于对象,面向对象,泛型,函数式,值语义.自由组合各种范式.
库:可以说c++是由库组成的.
库的特点:强大,有效,安全,自然语法,特定类型优化,自动管理资源,与自定义代码一样有效的泛型特征,很小的抽象开销,0开销准则(与你手写差不多)
低级访问
系统编程语言:低级硬件控制,响应硬件中断,设备驱动,任意操作内存(甚至操作位),附带汇编器,允许内联汇编代码
作为c的超集附带.
管理用户定义类型
大多数语言通过从栈分配内存,跑构造器函数来创建对象.
而c++可以在堆上,静态内存,栈内存,任意内存上构造.
可优化缓存:利用缓存,避免错误共享.
大多数语言容器不能在连续内存上分配,不能利用前向缓冲.
c++的数组,向量,单列,用户定义类型都可以.
宽应用领域
并不解决特定问题,而是解决通用问题
可伸缩:软件工程就是关于可伸缩,算法,语言.
低端:嵌入式,设备驱动,cgi,移动应用,你仅支付你用的,低内存占用.
高端:几百个工程师,几十个模块,单独编译模块.
高可移植
c机器模型:最小要求,全局硬件支持,
几乎所有平台,都有c++工具链
所有头部手机平台,唯一可用高级语言
不用重写,c++就可支持这些平台.
即使完美的语言,不能在特定平台上构建,也没有价值.
语言外部因素:工具链,分析工具,有经验工程师,软件库,书籍/说明材料,支持问题跟踪,培训机会.
大安装量,工业支持.
更好的管理资源
垃集:优势:无泄漏,或双处理,很烦的问题.
劣势:一直占用内存,程序员不能控制,可导致冻结,要求大量未用内存缓冲.
c++要求更好解决方案:
必须通用:内存是唯一资源,类似管理其他资源,使用后立即释放,
决定性析构.
RAII:获取资源即初化,获取责任是初化,出域时要释放,在适当生命期的对象(在栈上)要释放,finally违背了不要重复原则
尽量快,
在2000年,桌面计算很快了,似乎不需要速度了.
为什么写一个更复杂的语言,而在速度上只有丁点改进?
c++特点:c语言的负担,大量复杂却丁点更强大(模板,泛型,重载操作符,指针太难),管理语言似乎够快了,
管理语言:
java系:java,scala,jython,jruby,clojure,groovy
微软系:c#,f#,ironpython,ironruby,c++/cli
大学觉得管理语言比c系更好教.
指针太难!
但性能问题很重要.c++11出世了.
添加了:动,基于区间循环,枚一致,统一初化,
λ表达式:简化,更通用算法,更函数式
改进字符:字符集/统一码,自定义字面量
元组,各种指针:独针/共针/弱针.
更好支持库作者:类型自省,可变模板,完美转发
大消息:多线程,移动语义等等.
概念=约束+公理;
概念,要在类型,语义,操作上下功夫.
λ:嵌套函数/函数对象/匿名函数,λ也可以嵌套,不过都没多大必要.可能有些上下文时,可以省略点.明明可以用函数解决的,非要用λ,叫舍近求远.都没啥东西.
插件开发:感觉还是不如函数方便.折腾.
感觉,c++都没啥新东西了.
浙公网安备 33010602011771号