- swift是一门静态语言,但是可以嵌入动态内容。比如:
let a = 1
let b = 2
let c = "a + b = \(a + b)"
print(c)
上述程序编译是静态的,强类型检查。但是执行 c 字符串时,内容进行了动态解释,打印结果实际上先在()符号内评估表达式,再填写内容,所以得到的结果是 a + b = 3.
其内部机制是调用Swift REPL,你可以简单理解为Swift语言的动态脚本。
计算机语言发展到今天,已经不那么区分静态语言和动态语言了。Swift作为强类型检查的静态编译语言,可以加载动态链接库、连接到动态模块,也可以通过字符串转义进行动态脚本分析。
- 关于强弱类型的定义:
1.强类型语言:强类型语言也称为强类型定义语言。是一种总是强制类型定义的语言,要求变量的使用要严格符合定义,所有变量都必须先定义后使用。没有强制类型转化前,不允许两种不同类型的变量相互操作。强类型定义语言是类型安全的语言,如Java、C# 和 Python,比如Java中“int i = 0.0;”是无法通过编译的;
2.弱类型语言:数据类型可以被忽略的语言。与强类型语言相反, 一个变量可以赋不同数据类型的值,允许将一块内存看做多种类型,比如直接将整型变量与字符变量相加。C/C++、PHP都是弱类型语言,比如C++中“int i = 0.0;”是可以编译运行的;
OC语言是弱类型语言,可以用用任何类型的指针指向一个已知的对象,只会发出警告.
swift是强类型语言,是一个类型安全(type safe)的语言。类型安全的语言可以让你清楚地知道代码要处理的值的类型。如果你的代码需要一个String,你绝对不可能不小心传进去一个Int。
3.动态语言和静态语言的定义:
我们常说的动态语言和静态语言,其实是指动态类型语言和静态类型语言。先来看看动态类型语言:
动态类型语言,是指数据类型的检查是在运行时做的。用动态类型语言编程时,不用给变量指定数据类型,该语言会在你第一次赋值给变量时,在内部记录数据类型。
再来看看静态类型语言的定义:
静态类型语言,是指数据类型的检查是在运行前(如编译阶段)做的。
OC是一门动态语言,他不需要再编译时确定所有东西,而是使用runtime动态添加变量,类和方法.OC可以在运行时加入新的数据类型和新的程序模块:动态类型识别,动态绑定,动态加载
swift是一门静态语言,在编译代码时会做类型推断,也就是说编译器在编译过程中会检查出类型错误,并提示开发者尽早修正程序中存在的问题。
-
swift可不是脚本 是貌似脚本的编译语言
之所以貌似脚本 没有类型定义 是因为用了类型推断,这是历史上第一个同时有类型推断 类脚本的 函数型 的编译语言 开发者就是写clang llvm的大牛 -
swift和objective-c都是编译执行,swift比objective-c快的原因是,objective-c的方法是在运行时确定函数地址,编译时只记录方法名,运行时调用方法是根据方法名从哈希表中查找函数地址并跳跃到该地址执行代码,函数访问机制类似于C++的虚函数,大量时间浪费到查表上了。而swift的函数是在编译时确定函数地址,运行中直接跳跃到函数地址执行,无须查表,所以速度比objective-c快
Swift当然有runtime!别说Swift了,就算是C语言也有runtime,否则很多动态特性都无法实现~包括Blocks(Closure)特性,try-catch-throw等等。而且Swift的runtime也不比Objective-C小多少~
不过Swift的runtime与其基础标准库是融合在一起的,所以一般程序员无须关心~
1283539-31968e5f19abed4b.jpg
网友评论