c++名词解惑#
一。堆和栈的区别:
++++++栈:
- FILO
- os自动分配释放,函数参数,局部变量等。
- 一级缓存, 被调用时处于存储空间中,调用完毕立即释放。
- 栈数据在多个线程或者多个栈之间是不可以共享的,但是在栈内部多个值相等的变量是可以指向一个地址的。
++++++堆: - FIFO
- 程序员分配释放,分配方式类似于列表,全局变量等。
- 存放在二级缓存中,调用这些对象的速度要相对来得低一些。
二。RALL:
三。智能指针:
###############################
为什么是c++#
对于如何接管内存管理, 语言作者们分成了截然不同的两派
1,垃圾收集,比如java
垃圾收集并不意味着内存泄漏成为过去式, 倒是野指针确实成为了过去式, 因为只要还有指针引用一个对象, 这个对象就绝对不会被释放. (不过, 带有垃圾收集的语言或多或少都废除了指针吧, 用引用替代了指针)。
垃圾收集器的另一个问题是, 除了内存, 它无法对程序使用的其他资源执行垃圾收集. 垃圾收集是以内存管理为目标产生的, 只能收集不再使用的内存, 而不能收集程序使用的其他资源, 如消息列队, 文件描述符, 共享内存, 锁.等等. 程序员不得不对其他资源执行手工管理, 像 C 程序员那样小心翼翼的操作.
最终垃圾收集仍然没有解决 "人容易犯错" 的问题, 还是把其他资源的泄漏问题丢给了程序员.
2,RAII (Resource Acquisition Is Initialization) + 智能指针
C++ 要想实现 RAII + 智能指针, 两大技术缺一不可 :
一. 自动确定并调用 构造函数和析构函数
以 "编译器自动保证对象生命期" 的技术依托下, C++ 发明了 RAII 技术, 将资源的管理变成了对象的管理
二. 模板
模板的引入使得 RAII 技术得以 "一次实现到处使用".
但是, 如果对象分配于堆上, 程序员不得不手工调用 delete 删除对象.
如果指针也是自动对象就好了.
C++ 标准的第一次尝试是纳入 std::auto_ptr . 但是效果并不好, 不是所有指针都可以为 auto_ptr 所代替. 最要命的是, STL 容器无法使用 auto_ptr.
C++ 标准的第二次尝试就是纳入了 std::shared_ptr , shared_ptr 在进入 C++11 标准之前, 已经在 Boost 库里实践了相当长的时间.
============结论============
首先得益于 C++ 的"模板技术", shared_ptr 只需实现一次, 即变成可用于任何类型的指针. 其次, 得益于 C++ 的"自动生命期管理", 智能指针将需要程序员管理的堆对象也变成了能利用编译器自动管理的自动变量.
也就是, 智能指针彻底的将 delete 关键字 变成了 shared_ptr 才能使用的内部技术. 编译器能自动删除 shared_ptr 对象, 也就是编译器能自动的发出 delete 调用.
模板是智能指针技术必不可少的一部分, 否则要利用 RAII 实现智能指针就只能利用 "单根继承" 这一老土办法了. 没错, 这也是 MFC 使用的. ( MFC 诞生在 模板还没有加入 C++ 的年代. )
###############################
不选择python的原因#
lua
llvm-python
go, c之父
perl,bash,awk,python脚本快速简单
python缺乏IDE, 各种 profiler static/dymanic analyzer 工具, 缺乏编译器检查这种重要的消bug工具,很多人为了找出 bug , 都开 -Werror 参数啊! 把警告视作错误,在 C++ 执行大量的努力,就是要把 bug 消灭在编译期的时候,python 确把编译这种重要的消bug工具轻轻的丢了,没有真正的调试器。python 没有类型检查,可是运行时经常爆出没类型检查导致的各种类型不匹配导致的错误.更灾难的事情是,这种语法上的错误,居然是自动的变成了面条代码: 只在控制台打印错误,程序不会退出,有些,有的错误不会退出的
,如果是 GUI 程序,经常会发现各种莫名其妙的功能问题。prthon-er转投go, c++er 对 go 很冷静,因为有了c++11.
arch shell
debian
还在用plasma 4的distro傻的吗?
sed
###############################
QT & IOS & Python#
在Windows上都用XAML,他有不同的名字,譬如说WPF,Silverlight,Metro,Universal等,都一样。
偶的大多桌面代码都是
delphi(c dll)cocoa(osx)
delphi多了跨win osx
在慢慢转qt/qml,这东西是真跨平台 一套代码哪都跑win linux osx web
python学web。熟悉 HTTP 协议,熟悉 JSON 或 XML,把这个后端当作一个不输出 HTML 而输出 XML / JSON 格式的网站来做就对了。作为ios后端
C和S之间通信协议多种多样,如其他知友提到的HTTP,至于数据交换格式也是各种各样,如json,xml,yaml等,当然还有二进制的AMF,Protobuf等。
现在流行的RESTful的API规范也可作为进阶的选择。
应该看你的app是什么类型的。是需要长连接的,还是需要短连接多次请求的。
后端http协议,后端返回json,前端解析即可
直接上python + django + django rest, 一条龙服务
App和服务端交互其实跟你用什么语言做后端没什么关系, 无非就是App发起请求至服务端 服务端返回xml或者Json
python
相反,使用类似 import item.subitem.subsubitem 这样的语法时,这些子项必须是包,最后的子项可以是包或模块,但不能是前面子项中定义的类、函数或变量。
我想我只会用mac + github + markdown + sublime/vim写blog了