运用asp做购物网站的心得,网盘资源,网站还在建设中,关键词优化排名公司很多编程语言对比的文章#xff0c;总喜欢比较各种编程语言的性能、语法、IO模型。本文将从心智负担这个角度去比较下不同的编程语言和技术。内存越界如#xff1a;C语言、C(C with class)C/C可以直接操作内存#xff0c;但编程必须要面对内存越界问题。发生内存越界后…很多编程语言对比的文章总喜欢比较各种编程语言的性能、语法、IO模型。本文将从心智负担这个角度去比较下不同的编程语言和技术。内存越界如C语言、C(C with class)C/C可以直接操作内存但编程必须要面对内存越界问题。发生内存越界后程序会直接core dump开发者需要使用gdb工具分析内存错误的原因如果内存越界是偶发的比如由于数据同步问题造成数亿次中会出现一次解决起来非常困难甚至需要顶级专家才能找到问题原因。心智负担10现代C提供了STL库包含大量容器另外C支持引用语法不再需要直接操作指针降低了内存错误读写的风险。使用现代C的编程风格可以避免此问题。但由于C没有完全从语法层面移除指针不够彻底。宏C/C程序中经常使用预定义宏实现一些逻辑导致可读性变差。有些情况下会嵌套多次宏的使用展开后变得极其难读。心智负担6因此在C/C中建议使用enum或static inline函数代替宏。内存管理如C语言、CC/C语言需要手工管理内存malloc/new申请的内存要与free/delete成对使用。申请的内存忘记释放就会出现内存泄漏。心智负担8Java/PHP/Go等有GC的编程语言不需要手工管理内存不会因为代码错误引起内存泄漏。心智负担0数值类型C/C/GO等编程语言提供了有符号、无符号整型和浮点型8/16/32/64不同尺寸的整型。编程时需要额外处理避免数值溢出。心智负担6PHP/Java等编程语言默认整数为有符号int64降低了心智负担。一般业务项目中很难有超过2^63的数字不会遇到问题。但如果是做科学计算int64就难以满足需求了。在PHP中超过2^63底层会转为浮点型计算将丢失精度。心智负担1而Python整数是不限长度的可以做任意位数的数值计算。心智负担0类型约束Java是静态强类型编程语言因此在编程中存在类型约束某些情况下可能不是特别方便。如JSON序列化。不同类型的变量互相操作时可能需要进行显式类型转换。心智负担2PHP/JS是动态弱类型编程语言底层自动进行隐式类型转换。编程更方便。心智负担0。项目维护在大型项目或对已有系统进行代码重构以及项目代码更换开发者时弱类型带来可维护性、可读性的难题与Java/Go/C这样的静态强类型编程语言在编译期就可以发现问题。而动态、弱类型语言可能会因为重构或其他维护操作产生运行时错误增加了心智负担。心智负担5多线程编程Java/C/Go提供了多线程并行编程、无锁编程在编程中会存在数据同步问题。因此需要对临界资源进行加锁。而错误的锁操作又会带来死锁和热点争抢问题。需要开发者具备极高的素质否则难以做到正确无误并性能良好这可能需要耗费大量心智。心智负担10内存泄漏除PHP(php-fpm)之外的其他编程语言和技术(包括PHP Swoole)在服务器端程序中均为长生命周期。对全局/静态变量操作可能会导致内存或资源句柄泄漏。编程时需要注意。心智负担3而PHP(php-fpm)是短生命周期的在请求结束后会立即释放所有内存和句柄无需担心泄漏。心智负担0IO 超时同步阻塞IO模型的编程语言和技术在遇到某个慢IO会导致整个进程或线程挂起。极端情况下会出现所有进程/线程挂起引起线上服务不可用。开发者需要格外注意设置IO操作的超时时间避免慢请求带来进程/线程阻塞。心智负担2而且异步IO的Go/Node.js/Swoole等无需担心此问题。心智负担0汇总看到这里是不是又有很多感悟了呢~点击播放 GIF 0.0M