从设计角度讲C语言、C++、java、python的进化
1574 2020-12-22 09:16
C语言是过程式语言。里面有对内存的手动控制。因为精打细算,所以放东西的地方就需要衡量取舍。
java是面向对象的语言,目的就是为了扯开一个拿着香蕉摆拍的,背后那只大猩猩的全貌。你需要一个可以摆拍的漂亮香蕉,想要出各种角度,就需要后面可灵活调整的大猩猩。那么这个大猩猩还能有更多的拓展,于是内存无法承受自由散漫的扩展。而使用了堆。原因就是不需要整整齐齐的叠放。而只需要扔出去就好。那么垃圾回收就很重要。自动的垃圾回收机制就很重要。让算法和时间来换取空间的自由。那么非堆的设计就是为了提高效率。提高查找的效率,节省存储的时间。基础数据类型的设计就是就是沿用的C语言的设计。这是基础。并且局部变量中存储在栈帧中。也是为了高效。出了圈就没了影响力。所以就不存在共享。也就不用回收。只有类共享,而不是线程共享的,才需要回收。线程里的都在栈上。虽然非堆节省了基础数据类型的存储空间,但是它依然需要堆的垃圾回收。而对象引用的存储是为了更好的指向堆内的真正内容。所以非堆里面理应存放堆内容的引用。而并不是堆内容的副本。
说起副本。它的使用解决了运算传递的快捷。当需要处理的时候,拷贝一份数据过来处理。返回一个指向结果的引用,新生成的对象,和你需求提出的格式满足即可,并不需要原始的存储容器。这才是便于垃圾回收和多线程任务的。里面涉及到共享只是取值。而不会影响牵连过多的原始数据。
最后说说日常和优先级。到底一件事来了方向锅碗瓢盆就飞奔而去重要。还是平常的日子一针一线重要?年假不歇等于没有,脑子不用等于白聪明。温饱是个基础,但是追求各自精彩才是活着的意义。卸载的衡量标准重要?还是在死之前有个希望重要。这个矛盾其实才是让人纠结着、挣扎着多活着的意义吧。
全部评论