编程语言通常分为两类:“动态”和“静态”。这是否总是如此,一个编程语言只属于其中一种,而不同时属于两种?
一个编程语言通常只能被归为动态或静态中的一种,不能同时归为两种。
编程语言通常分为两类:“动态”和“静态”。这是否总是如此,一个编程语言只属于其中一种,而不同时属于两种?
一个编程语言通常只能被归为动态或静态中的一种,不能同时归为两种。
Objective-C是另一个例子。它是C语言的严格超集,而C语言是静态类型的。但是"objective"的部分可以完全动态(所有对象都声明为类型id
)。编译器对Objective-C对象进行了一些静态类型检查,虽然它受限于许多标准方法返回id
。例如,NSArray
集合返回id
类型的对象,因此编译器无法捕捉:
NSMutableArray *a = [NSMutableArray arrayWithObject:@"I am a string"]; NSNumber *n = [a objectAtIndex:0]; //将字符串赋给数字!
虽然编译器可以在编译时标记NSNumber *n = @"I am a string"
。
是的。可以同时拥有静态和动态。
如果使用C#,则我们处于静态轨道上,并且在VS 2010(.NET 4.0)中使用新的 System.linq.Expression tree API
时进行移动。 我们将我们的代码针对称为DLR(动态语言运行时)的框架,它位于CLR之上。
甚至由 expression class
创建的代码也可以被其他动态语言(例如IronPython等)使用。
同样地,我们可以在CLR上使用iron python代码。 我们需要确保它们发出表达式树并针对DLR进行定位即可。