动态语言的特性

什么是动态语言

动态语言,是指程序在运行时可以改变其结构:新的函数可以被引进,已有的函数可以被删除等在结构上的变化。Ruby、Python、javaScript等属于动态语言,C、C++、Java等属于静态语言。

专业名词

Dynamic Programming Language (动态语言或动态编程语言)

Dynamically Typed Language (动态类型语言)

Statically Typed Language (静态类型语言)

静态语言

静态类型定义语言。即一种在编译时,数据类型是固定的语言。大多数静态类型定义语言强制这一点,它要求你在使用所有变量之前要声明它们的数据类型。在使用数据之前,我们必须首先定义数据类型,这些数据类型包括int ,float,double等等。就相当于在使用它们之前,首先要为它们分配好内存空间。静态类型语言的主要优点在于其结构非常规范,便于调试,方便类型安全;缺点是为此需要写更多的类型相关代码,导致不便于阅读、不清晰明了。

合并动态类型与静态类型的一种语言---Objective-C

objective-c语言是C语言的一个子类,所以Objective-C是一个静态语言,但是Objective-C的三大特性之一的多态性让其拥有了动态性。oc的动态性让程序可以在运行时判断其该有的行为,而不是像c等静态语言一样在编译构建时就确定下来。它的动态性主要体现在一下三个方面:

1。动态类型。 如id类型。实际上静态类型因为其固定性和可预知性而使用得更加广泛。静态类型是强类型,而动态类型属于弱类型。运行时决定接收者。

这里补充讲一下强、弱类型:语言有无类型、强类型和弱类型三种。无类型的不做任何检查,甚至不区分指令和数据;弱类型的检查很弱,仅能区分指令和数据;强类型的严格在编译期进行检查。强类型语言在没有强制类型转化前,不允许两种不同类型的变量相互操作

2。 动态绑定。让代码在运行时判断需要调用什么方法,而不是在编译时。与其他面向对象语言一样,方法调用和代码并没有在编译时连接在一起,而是在消息发送时才进行连接。运行时决定调用哪个方法。

3。 动态载入。让程序在运行时添加代码模块以及其他资源。用户可以根据需要加载一些可执行代码和资源,而不是在启动时就加载所有组件。可执行代码中可以含有和程序运行时整合的新类。

对象是运行时类的一个实例。在类里声明了的实例变量和方法,它的每个实例都在内存中拥有同样的实例变量,以及指向那些方法的指针。在oc中对象永远是通过指针来引用的。

Objective-C动态类型代码剖析

1、类:Objective-C

动态语言的特性_第1张图片

2、对象id:Objective-C


动态语言的特性_第2张图片

3、运行时:

Objective-C运行是动态的,在编译后为类添加方法。

类的实例对象的isa指向它的类;类的isa指向该类的metaclass;

类的super_class指向其父类,如果该类为根类则值为NULL;

metaclass的isa指向根metaclass,如果该metaclass是根metaclass则指向自身;

metaclass 的super_class指向父metaclass如果该metaclass是根metaclass则指向该metaclass对应的类;

Object-C为每个类的定义生成两个objc_class,一个普通的 class,另一个即metaclass。我们可以在运行期创建这两个 objc_class数据结构,然后使用objc_addClass将class注册到运行时系统中,以此实现动态地创建一个新的类。

你可能感兴趣的:(动态语言的特性)