近十年来,互联网发生了翻天覆地的变化。新的联网方式、新的通讯方式,乃至新的支付、交易方式深刻地影响了人们的生活,在浪潮的冲击之下,传统编程语言经受住了考验,并焕发了新的生机,同时也涌现出了很多优秀的新型编程语言。
![编程语言趋势图](https://i-blog.csdnimg.cn/blog_migrate/8ffbb43c05a9f380ab0802f3ff4df771.png)
这是近十年来各编程语言的发展趋势图(数据源自 IEEE-spectrum 和 Stack Overflow),中间一栏是语言的应用领域,如 Web、移动端、企业应用、嵌入式等,右侧是语言相关的新项目数量趋势图。
可以看到 C++、C#、Java 等传统语言已经覆盖了各个领域,仿佛一门语言什么都可以做,Javascript 也早已走出了浏览器,Python 也正式步入嵌入式领域。如果十年前有人说要用 PHP 搞 AI 是不可思议的,但现在各种由 PHP 实现的更亲合 Web 环境的深度学习平台也进一步推进了人工智能的发展。
随着软件系统越来越复杂,为了有效控制从业人员的学习成本,编程语言全栈化将是一个大的趋势。而企业的营收突破了信息传播、交易方式等业务模式的限制后,软件技术的发展会更偏向算法、硬件乃至基础理论的研究,既可满足 CPU 密集型程序的开发又可使产品快速落地的编程语言将会胜出。
回顾以往的变革,从电脑到手机,从传统硬件到智能家居,从互联网到物联网,可以看到当今互联网的显著特征:
- 设备智能化
- 软件服务化
- 多领域协作密切化
而各种丰富的软件服务之间又是紧密相关的,对产品的质量和安全性也提出了更高的要求。Rust 等新兴语言将安全性提升到了一个新的高度,同时又保证多种编程范式的灵活应用,这是新兴语言生命力旺盛的根本原因之一。
而对于传统语言,在这种历史的契机之下,有必要集结、整合各领域的安全编写规则,形成综合规范体系,以实现两个目标:
- 企业对产品代码质量进行统一管控
- 使从业人员形成完善的安全知识体系和严谨的工作态度
![](https://i-blog.csdnimg.cn/blog_migrate/69688ec677bac47088c0bf8389fbfa0a.png)
同一门语言在不同的领域有不同的侧重,嵌入式系统更注重在有限资源下的专用性和实时性,由于专有硬件更加多样化,所以嵌入式软件也更注重可移植性。对于桌面软件来说,其环境是灵活多变的,还需要防止其他程序的恶意干扰,所以桌面软件往往更强调健壮性。在通用架构下桌面与服务端的本质区别实际上并不是特别明显,但在桌面的基础之上,服务端软件更注重稳定性以及其专有的网络安全措施。
举个例子,在资源管理上,嵌入式系统和服务端系统有较大差异,“动态内存分配”这种资源管理方式在服务端可能完全不是问题,但在嵌入式等环境中可能就是需要规避的原则性问题了。
再比如进程崩溃这种问题,在服务端会造成“拒绝服务”这种安全漏洞,造成业务瘫痪,在桌面端除了给用户造成不好的体验外,还可能会遭到恶意调试,导致隐私泄露等安全问题,在嵌入式环境中甚至会导致设备的损毁,总之,产品的健壮性和安全性是紧密相关的。
360 质量工程部集结整合了 C 和 C++ 语言在各领域的注意事项,总结成《360 安全规则集合》,已在 Github 上开源,也为其他语言的相关工作提供参考模式。
![](https://i-blog.csdnimg.cn/blog_migrate/8abdbad3a6481d6e29f00522671cad2e.png)
项目地址:
360 安全规则集合https://github.com/Qihoo360/safe-rules
Web 版:
360 安全规则集合https://saferules.github.io/
其特点有:
- 严格遵循编程语言的 ISO 标准
- 融汇多种权威规范体系,符合国家审计标准
- 适用于桌面、服务端及嵌入式等多种应用场景
- 满足规范、审计、培训等多方面需求
- 注重自动化代码审计的实现方法
保障软件安全、提升产品质量是宏大的主题,需要多方面地学习、探索与实践,欢迎提供修订意见和扩展建议。