dka*_*ich 17 static typing dynamic objective-c
静态类型语言和动态类型语言原则上看起来像是相反的概念.但是,像Objective-C这样的语言如何同时成为这两种东西?在我看来,Objective-C比动态更静态.有人可以解释一下这是可能的吗?
Bar*_*ark 28
我相信你会混淆静态类型和动态方法解析.Objective-C绝对是强有力的,静态类型的.与C一样,必须声明和键入所有变量(在其他现代的静态类型语言中,甚至没有类型推断).编译器根据变量类型生成代码,并且在运行时不能更改此类型.
但是,Objective-C方法调用使用消息传递范例,其中消息名称和目标在编译时进行编码,但是要在运行时由Objective-C运行时库查找要执行的代码的地址.
Objective-C实际上(概念上)只是C语言本身的一个层,因此可以同时具有静态和动态类型.静态,如果你使用base-C的东西,动态,如果你使用Objective-C扩展.
但是C也提供了这种功能.如果您只考虑C中的void*类型,您会发现它可以指向任何类型,从而为您提供(非常粗略的)动态类型语言.
例如:
int i;
float f;
double d;
void *p = &i;
p = &f;
p = &d;
Run Code Online (Sandbox Code Playgroud)
在p上面的所有分配中,它被指向不同的类型.如果你巧妙地编写代码,你甚至可以在C中模拟RTTI和多态.
我会考虑一种主要是静态或动态类型的语言,基于它最常用的语言.
| 归档时间: |
|
| 查看次数: |
5922 次 |
| 最近记录: |