PHP、Java、Python、C、C++ 这几种编程语言都各有什么特点或优点?

相信每一个计算机科班出身的同学或许都有这样的经历:在大三的某一天,仿佛打通了全身筋脉一般把三年的所学:“数电里的与非门——计算机体系结构——汇编语言——C语言——C++语言——Java语言”。所有知识全部串联了起来。所有这些语言的出现都仿佛都有了必然性和追根溯源的历史感。

 

 

**阅读指引**

读懂此文,需要以下基础:

1. 至少写过50000行的代码;

2. 汇编基础(静态数据段,代码段,堆栈段)。

 

 

有以下或者类似知识就更好了:

1. C语言编译,C++对象模型,MFC反射的实现

2. JAVA的解释器运行原理

3. 使用过javascript,Python,PHP:感受过代码和类型系统在运行时的自由程度的不同

4. 计算机组成原理

 

 

**序 —— 一些问题**

1. 程序设计语言的目的是什么?

2. 为什么大多数语言有控制流?逐行执行+跳转。这与我们的需求差很远(例如一个教务管理系统、一个自动打车APP)

3. 为什么类型申明在C语言中要与控制流隔离开来?

4. 现在主流语言最基本的元素是?

5. 有没有语言它的类型结构,在运行时也可以改变?

动态性?

 

什么是动态性?

1. 编译后确定了什么信息,之后不再改变;

2. 运行时可以改变、添加什么;

3. 运行时是否保存着类型信息。

 

程序中的信息分为几类?

1. 数据信息

a) 编译时Meta-Data元数据(类型框架、空间占用)

b) 运行时Meta-Data元数据(继承体系、用于new或者反射)(特别区别编译与运行的Meta-Data的不同。)

c) 堆栈段中地址偏移(C++的switch case中不能声明变量、共享内存)

d) 静态段中地址

2. 指令信息

a) 代码段(动态性需要操作系统或者虚拟机支持,例如动态链接库,动态类加载,lisp语言自生成代码)

 

 

**语言举例**

 

**汇编语言**

 

汇编语言没有动态性吗?

没有。首先,寄存器、数据段、堆栈、代码段完全由程序员控制。完完全全是写死了的。然后,根据冯诺伊曼机的规则;取指令,执行,取指令,执行……

 

 

既然都有数据段了,还要堆栈段来做什么?这不是多余?

一开始本没有堆栈,直到60年代出现了module模块化,才有了堆栈。汇编中的模块叫子程序,不过仍旧靠程序员全权控制。

 

堆栈和模块化的优点有?

1. 递归

2. 功能分离到模块,可复用

3. 封装作用域

 

堆栈和模块化的缺点有?

1. 时间上:保存现场、还原现场的代价(另,高级语言编译“消除尾递归”节约部分成本)

2. 空间上:爆栈的危险

 

 

**C语言**

 

C语言比起汇编多了什么东西?

1. 编译器

2. 表达式(相比汇编,可以处理多个操作数了。)

3. 函数与模块{}(真·模块化,栈操作无需程序员完成)

4. 类型(原子类型、结构类型、数组、指针)

5. 头文件,库

总之,C语言并没有比汇编多了新的特性,它只是把汇编的繁

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值