编译、解释型语言:编译型语言需要首先由编译器将源代码编译为机器代码,再由机器执行,即运行前有一个编译过程,C++是典型的编译语言,GCC是C++的最流行的编译器;解释型语言不需要编译,运行时直接由解释器解释执行,典型代表如shell、Python;也有语言是这两种类型的混合,即既需要编译,又需要解释执行,典型代表如Java,Java代码首先由编译器编译为Java字节码,后由JVM(Java虚拟机)解释执行;需要说明的是编译、解释的界限并不绝对,例如Python代码解释执行前也可以被编译或者说优化为内部代码(.pyc格式文件)。
可移植性:指可以在多种环境(平台)下运行,C++具有可移植性,其可移植性由编译器可以将符合标准的C++代码编译为不同的目标平台而得到。
静态、动态类型:若类型是在编译时确定,则为静态,如C++,若类型是在运行时确定则为动态,如Python,一般来说,静态类型中变量类型确定之后就不能改变,动态类型中变量类型(在运行时)可以改变。
强、弱类型:强类型偏向于更严格的类型检查,更不容易进行隐式类型转换,弱类型则相反,C++、Python都可被认为是强类型。
显式、隐式类型:若类型是语法的一部分(例如,变量的带类型的声明、定义)则为显示,若类型是推导出来,非显示指定,则为隐式,C++为显示类型,Python为隐式类型。
类型安全、不安全:类型安全语言能正确解释内存区域的类型,即总能以和构建时相同(或兼容)的类型访问内存区域,由于指针的存在,一般认为C++是类型不安全的,Python是类型安全的。
C++是静态、强、显示、不安全类型语言,当然以上关于类型概念并没有严格定义,只是通俗的、大致的分类,参考文献2。
内省、反射:内省(Introspection)是指程序运行时检查对象类型的能力,反射(Reflection)更进一步,指程序运行时可访问、检测、修改自身状态或行为的能力,参考文献3,C++通过dynamic_cast和typeid可实现内省。
闭包:又称词法闭包(Lexical Closure)或函数闭包(Function closures),由函数和与其相关的引用环境(变量)组合而成的实体(集合),是实现函数式编程的关键,参考文献3。
编程范型(模型):过程、结构化、面向对象、泛型、函数式、并发、分布式等,参考文献4,C++可以实现过程、结构化、对象、泛型(通过模板)、函数式(通过operator()模拟)编程。
编程语言排行榜:TIOBE发布的编程语言热度指数给出了最热门的编程语言以及它们的份额。
参考文献:
- C++面向对象程序设计,龚晓庆等著,2011年;
- 弱类型、强类型、动态类型、静态类型语言的区别是什么?——知乎,另几篇:类型系统、重要性;
- Wikipedia条目:内省、反射、闭包;
- The principal programming paradigms, Peter Van Roy, 更多关于:编程范型、编程语言概念;
- Obscure C++ Features,中文翻译:C++语言的15个晦涩特性;