动态语言在什么情况下适合?

时间:2009-02-27 12:38:24

标签: programming-languages dynamic-languages

我使用过静态语言,如C#,Java,C,有些人在Javascript中做了一些动态语言。

与流行的看法相反,我发现自己在C#中编写的代码比使用Javascript更快(这可能是因为我在C#中比javascript有更多的经验)

所以,我想要理解的是动态语言适合哪些地方,并且可以比静态语言更受青睐。

企业系统是否可以使用动态语言,需要在未来几年内进行维护,或者主要用于使用和抛出代码?

5 个答案:

答案 0 :(得分:3)

我认为你不能这样概括。动态/非动态语言在同一个域中都很有用,它几乎包含所有内容。

答案 1 :(得分:3)

我会随时使用动态语言,简单性和灵活性比性能和显性更重要。静态类型为编译器提供了许多可用于编写非常快速的汇编代码的信息。它还使合同显式化,可能使代码段更容易被孤立地推理。但是,因为这些合同是如此明确并且通过如此多的代码产生连锁反应,所以它们有点难以改变。在需要高度灵活性的系统中,这可能会导致产生大量复杂性以克服静态类型的刚性。

就个人而言,我认为缺乏静态类型检查并不是什么大不了的事。当然,在编译时失败是理想的快速故障。然而,动态语言范式并不是很糟糕。当在运行时以动态语言发生类型错误时,事情会立即失败并显示错误消息。你不仅会在一些完全不同的地方获得奇怪的未定义行为和失败。

另一方面,我发现一个好的模板系统(不是C ++)和静态类型推断可以是绝对的天赐之物。这使您可以充分利用这两个方面,因为它基本上是编译时动态类型。在编译时,所有内容仍然会被静态检查。早期捕获错误并生成有效的汇编代码。尽管如此,您仍然保留了在设计时不必明确合同的灵活性。我的理解是Haskell,OCaml等做得很好。如果您对具有更主流外观的语言感兴趣,请尝试D。

答案 2 :(得分:0)

一个显示C#4.0动态有用性的静坐。假设您有一个控件,可以包含一个用于两个控件。他们都有DataSource属性,但这个常见的超类不具备。为了明确这一点,您可以使用动态来检查属性是否存在于运行时级别。

其他场景涉及基于条件的运行时类修改。假设只有函数C()返回true,你想要函数A()在B类中。它可以在JavaScript中完成,但C#不能这样做。

答案 3 :(得分:0)

JavaScript不是最好的例子。你应该看看Python,Ruby或Groovy。

答案 4 :(得分:0)

我想指出,动态语言的类型可以由程序员隐式定义,与静态语言相同。

动态语言的一个好处是你可以编写方法存根来调用实际上不存在的对象和方法。这对于首先设计代码并稍后填写详细信息非常有用。当你在团队中工作时很好。不过不用担心,如果你这样做,编译器通常会给你一个警告,告诉方法调用可能不起作用。编译器将允许您编写代码并运行该代码。

动态语言功能强大,但功能可能会使它们有时难以调试。