首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >您在Scala中缺少的动态语言(如Ruby或Clojure)的特性是什么?

您在Scala中缺少的动态语言(如Ruby或Clojure)的特性是什么?
EN

Stack Overflow用户
提问于 2010-04-02 12:15:16
回答 7查看 2.2K关注 0票数 13

如果您选择静态类型的语言,比如Scala (或者F#,Haskell,C#),而不是动态类型的语言,比如Ruby、Python、Clojure、Groovy (这些语言具有宏或运行时元编程功能),那么您在实践中会失去什么呢?请考虑最好的静态类型语言和最好的(在您看来)动态类型的语言,而不是最差的语言。

答案摘要

与Scala等静态类型语言相比,Ruby这样的动态语言的主要优点是:

  • 快速编辑-运行周期( JavaRebel是否缩小了差距?)
  • 目前Scala/Lift的社区比Ruby/Rails或Python/Django要小得多
  • 可以修改类型定义(尽管动机或需求并不十分清楚)
EN

回答 7

Stack Overflow用户

发布于 2010-04-02 14:27:40

原则上,当不清楚(在静态上下文中)应该做什么正确的事情时,您就放弃了忽略所使用的类型的能力,这就是它。

由于复杂的类型检查可能相当费时,您也可能被迫放弃快速的在线元编程。

实际上,对于Scala,您几乎没有放弃其他什么--也没有什么我特别关心的。不能注入新方法,但可以编译和运行新代码。您必须在函数参数中指定类型(以及带有递归函数的返回类型),如果您自己从未犯过类型错误,这会稍微有些烦人。因为它编译了每个命令,Scala并不像Python那样快。而且,由于它使用Java反射机制,所以您无法像使用Python那样轻松地进行在线检查(至少不构建自己的检查库)。

票数 9
EN

Stack Overflow用户

发布于 2010-04-02 12:53:47

选择哪种静态或动态语言比静态/动态选择本身更重要。一些动态语言具有良好的性能和良好的工具。一些静态语言可以是简洁的、有表现力的和增量的。有些语言几乎没有这些特性,但确实有大量经过验证的代码库。

票数 4
EN

Stack Overflow用户

发布于 2010-04-02 12:32:13

  1. 动态语言往往有更灵活的类型系统。例如,Python允许将新方法注入到现有的类中,甚至可以插入到单个对象中。
  2. 许多(并非所有)静态语言缺乏构造复杂文本的功能。例如,像C#和Java这样的语言很难模仿下面的JavaScript { 'request':{'type':'GET', 'path':mypath}, 'oncomplete':function(response) { alert(response.result) } }
  3. 动态语言具有非常流畅的语义。Python允许导入语句、函数定义和类定义出现在函数和if语句中。
  4. eval是大多数动态语言的主流,很少是静态语言。
  5. 在动态语言中,高阶编程比静态语言更容易(我主观地认为),这是因为必须完全指定函数参数的类型是很麻烦的。
    • 这是特别的,所以对于递归的HOP结构,在那里类型系统可以真正阻碍。

  1. 动态语言用户不必处理协方差和反方差。
  2. 泛型编程在动态语言中几乎是免费的。
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2566569

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档