3

编程语言分为两大类“动态”和“静态”。- 编程语言是否总是存在于其中一个而不是两者中,我的意思是一种语言可以同时是动态的和静态的吗?

4

5 回答 5

4

C# 4.0 是一种静态类型语言,也支持动态解析dynamic关键字基本上告诉编译器:暂时不要担心这个。如果它无法在运行时解析类型,则会引发异常。

于 2009-11-26T06:33:32.150 回答
4

静态语言和动态语言的区别非常模糊,因为它可以引用许多不同的(或多或少合适的)标准。我将尝试回答每种情况:

解释/编译

这不取决于语言本身,而仅取决于所使用的实现。因此,语言可以通过解释器和编译器来执行。例子

  • Haskell (GHC / GHCI / 拥抱)
  • C++ (G++ / Ch)
  • F#

一些编译语言还可以在运行时(.NET)编译它们的代码。

静态/动态类型

静态和动态类型(鸭子类型)可以结合在一种语言中。请参阅 C#'s dynamicVB with Option Explicit/Strict offBoo。结构类型可用于在没有显式类型层次结构的情况下制定严格类型。多态基类型 ( System.Object) 也支持某种动态行为,尽管类型是静态给出的。

元构造(例如反射、运行时类型生成)

也可以在 Java 和 .NET 中使用。

函数技术(例如高阶函数、延续)

也可以在静态类型语言中复制。请参阅 Haskell 或 Scala。

于 2010-01-31T12:37:35.363 回答
2

Objective-C 是另一个例子。它是 C 的严格超集,C 是静态类型的。但是“客观”的东西可以是完全动态的(所有对象都声明为 type id)。编译器会对 Objective-C 对象进行一些静态类型检查,尽管它受到限制,因为许多标准方法返回id. 例如,NSArray集合返回类型为 的对象id,因此编译器无法捕获:

NSMutableArray *a = [NSMutableArray arrayWithObject:@"我是一个字符串"];
NSNumber *n = [a objectAtIndex:0]; //将字符串分配给数字!

尽管它可以NSNumber *n = @"I am a string"在编译时标记 , 。

于 2009-11-26T07:34:38.720 回答
1

是的。可以同时拥有静态和动态。

如果有人使用 C#,那么我们就在静态轨道上,而我们System.linq.Expression tree API在 VS 2010 (.NET 4.0) 中使用新的运动。我们将我们的代码定位到称为 DLR(动态语言运行时)的框架,它位于 CLR 之上的一层。

甚至我们创建的代码expression class也可以被 IronPython 等其他动态语言使用。

同样,我们可以在 CLR 上使用 Iron Python 代码。我们只需要确保它们发出表达式树并针对 DLR。

于 2010-01-31T12:13:50.033 回答
0

一种语言可以同时是动态的和静态的吗?

动态和静态以相当模糊的方式指代许多不同的事物。特别是,语言可以是静态或动态类型的,这意味着类型检查要么在编译时在某种程度上强制执行,要么完全推迟到运行时。但是人们通常将一种语言称为“动态”,因为它具有 REPL,因此可以交互地评估定义和表达式。事实上,F# 是一种静态类型语言,在一项调查中被评为最佳动态语言。动态也可以指进行内省/反思的能力。

所以我想一种语言可以同时是动态的和静态的。特别是,通过静态类型检查和支持交互式评估。

于 2013-12-01T14:25:23.527 回答