2

我使用过 C#、Java、C 等静态语言,还有一些使用动态语言 Javascript 完成了一些工作。

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

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

是否可以将动态语言用于需要维护多年的企业系统,或者它主要用于使用和抛出代码?

4

5 回答 5

3

我不认为你可以这样概括。动态/非动态语言都可以在同一领域中使用,该领域几乎包含所有内容。

于 2009-02-27T12:49:50.383 回答
3

只要简单性和灵活性比性能和明确性更重要,我就会使用动态语言。静态类型为编译器提供了大量信息,可用于编写真正快速的汇编代码。它还使合约变得明确,可能使代码部分更容易单独推理。然而,因为这些合约是如此明确,并且通过如此多的代码产生连锁反应,所以它们有点难以改变。在需要高度灵活性的系统中,这可能会导致创建大量复杂性来绕过静态类型的刚性。

就个人而言,我不认为缺少静态类型检查有什么大不了的。当然,在编译时失败是理想的快速失败。然而,动态语言范式并不是很糟糕。当动态语言在运行时发生类型错误时,事情会立即失败并带有明确的错误消息。您不仅会在某个完全不同的地方得到奇怪的未定义行为和失败。

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

于 2009-02-27T14:52:45.453 回答
0

一种情况表明 C# 4.0 动态的有用性。假设您有一个可以包含一对两个控件的控件。它们都具有 DataSource 属性,但这个常见的超类没有。为了明确这一点,您可以使用动态检查该属性是否存在于运行时级别。

其他场景涉及基于条件的运行时类修改。假设您希望函数 A() 属于 B 类,如果只有函数 C() 会返回 true。它可以在 JavaScript 中完成,但 C# 无法做到这一点。

于 2009-02-27T12:46:54.477 回答
0

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

于 2009-02-27T12:54:16.423 回答
0

我要指出,动态语言的类型可以由程序员隐式定义,就像静态语言一样。

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

动态语言很强大,尽管有时这种能力会使它们更难调试。

于 2009-03-20T18:09:44.413 回答