编程语言分为2个主要类别“动态”& “静态的”。 - 编程语言总是存在于其中之一而不是两者中,我的意思是语言可以同时是动态和静态的吗?
答案 0 :(得分:4)
C#4.0是一种静态类型语言supports dynamic resolution。 dynamic
关键字基本上告诉编译器:现在不要担心这个问题。如果在运行时无法解析类型,则抛出异常。
答案 1 :(得分:4)
static 和动态语言的区别非常模糊,因为它可以引用许多不同的(或多或少合适的)标准。我将尝试回答每个案例:
这不取决于语言本身,而只取决于所使用的实现。因此,语言可以通过解释器和编译器来执行。实例
某些编译语言也可以在运行时(.NET)编译代码。
静态和动态类型(鸭子类型)可以用一种语言组合。请参阅C#的dynamic
, VB ,其中 Option Explicit / Strict off 或 Boo 。结构类型可用于在没有显式类型层次结构的情况下制定严格类型。多态基类型(System.Object
)也支持某种动态行为,尽管类型是静态给出的。
也可以在Java和.NET中使用。
也可以使用静态类型语言进行复制。见Haskell或Scala。
答案 2 :(得分:2)
Objective-C是另一个例子。它是C的严格超集,C是静态类型的。但是“客观”的东西可以是完全动态的(所有对象都被声明为类型id
)。编译器对Objective-C对象进行了一些静态类型检查,尽管它受到限制,因为许多标准方法返回id
。例如,NSArray
集合返回类型为id
的对象,因此编译器无法捕获:
NSMutableArray *a = [NSMutableArray arrayWithObject:@"I am a string"]; NSNumber *n = [a objectAtIndex:0]; //assigning a string to a number!
虽然它可以在编译时标记NSNumber *n = @"I am a string"
。
答案 3 :(得分:1)
是。它可以同时具有静态和动态。
如果使用C#,那么我们处于静态轨道,我们在VS 2010(.NET 4.0)中使用新的System.linq.Expression tree API
。我们将我们的代码定位到称为DLR(动态语言运行时)的框架,这是CLR之上的一层。
即使我们由expression class
创建的代码也可以被其他动态语言(如IronPython等)使用。
同样,我们可以在CLR上使用铁python代码。我们需要确保它们发出表达树并且针对DLR。
答案 4 :(得分:0)
语言可以同时是动态和静态的吗?
动态和静态以非常模糊的方式引用许多不同的东西。特别是,语言可以是静态或动态类型的,这意味着类型检查要么在编译时强制执行,要么完全延迟到运行时。但人们经常将语言称为“动态”,因为它具有REPL,因此可以交互式地评估定义和表达式。实际上,F#是一种静态类型语言,在调查中被评为最佳动态语言。动态也可以指内省/反思的能力。
所以我认为一种语言可以同时是动态的和静态的。特别是,通过静态类型检查和支持交互式评估。