对于IronPython / IronRuby是F#,因为C#是VB.NET的吗?

时间:2009-06-10 19:55:54

标签: c# vb.net f# ironpython ironruby

我刚刚听了podcast of Chris Smith talking about F#,其中谈到F#是一种语言,它允许你以不同的方式处理问题而不是C#/ VB.NET,而不是“推动”你“将数据转换链接在一起”,以及F#将如何“变得像XML”,除了你选择的语言(C#或VB.NET)之外你还可以使用它来解决某些问题。更有效的方式。

这个让我思考关于.NET语言的关系,这是我理解它们的方式:

  • C#和VB.NET 语法上但并没有太大差异,即C#程序员不会学习VB.NET以“以新的方式解决问题”
  • 然而,C#或VB.NET程序员将学习F#以“以功能方式接近编程问题

IronPython IronRuby 怎么样? Chris提到“F#从Ruby和Python中学到了很多东西”,所以我认为F#与IronRuby / IronPython有类似的关系,而C#与VB.NET有关。然而,有一点谷歌搜索告诉我 IronRuby和IronPython都建立在DLR上,但F#不是

如何最好地理解F#,IronRuby和IronPython之间的关系?

6 个答案:

答案 0 :(得分:15)

从语言的角度来看,F#和IronPython / IronRuby是光年。 F#是一种功能强大的高级编译语言。 IronRuby / IronPython是动态类型的解释语言。

我相信IronPython还支持编译,但我不是100%肯定,而是更少关于ruby。

VB.Net和C#之间的关系更加紧密。

答案 1 :(得分:6)

在许多方面,F#和Ruby / Python在表面上相似。所有这三种语言都可以让您简洁地表达想法,而不会乱丢许多类型的代码。但是,F#实际上与Ruby和Python非常不同,因为F#是一种静态类型语言,而Ruby和Python是动态类型的。惯用F#代码很少提及类型,但编译器推断类型,编译期间编译器将标记任何类型错误。对于Ruby和Python,使用错误类型的值只会在运行时生成错误。 Ruby和Python的动态意味着两者都比F#更适合元编程(例如,类型可以在运行时修改)。另一方面,对于大多数任务而言,F#将更具性能(与C#相当),并提供许多不错的功能抽象,例如具有模式匹配的区分联合。确实很好地学习这些语言会让你以不同于C#或VB.NET的方式思考问题,但是你的方法在F#和Python / Ruby之间可能会有很大不同。

答案 2 :(得分:5)

我认为F#从OCaml学到了很多东西,而不是Ruby和Python的结合。唯一真正的比较是,F#将ML带入.NET,就像IronPython / Ruby将Python / Ruby带到.NET一样。

答案 3 :(得分:0)

F#更像是一种“工具”语言,其中存在一些特定问题,这些问题最好用功能方法解决。 F#本质上是线程安全的,这使人们希望它有助于扩展应用程序以使用多个处理器。我看到F#用于构建将在VB.NET或C#中使用的组件来处理特定问题。

答案 4 :(得分:0)

F#的某些方面与动态语言类似;然而,JaredPar的答案总结了它。 F#属于它自己的函数式编程类别,其中IronRuby和IronPython是动态语言和C#/ VB OO语言。他们都可以做同样的事情,只取决于你想怎么做。每个人都有针对特定问题的利弊。

答案 5 :(得分:0)

注意:这主要是我对这个主题的想法和观察的汇编。我白天是C#程序员,晚上是Python。

是的,我同意一些已经说过的话,但我有一些时间,想要详细阐述和分享我的想法。

F#是一种功能语言。这意味着你可以更加关注动词。它仍然是静态类型并在CLR上运行,但您以不同方式构建代码并以不同方式解决问题。通常人们认为功能语言在结构上更具数学性,更容易正式证明。当然,这通常被认为主要是学术性的。

C#和其他静态类型的OO语言更专注于名词以进一步推断我的类比。因此,您可以构建代码并解决与此相关的问题。当然,在OO语言中更常出现的对象上维护状态和使用非确定性方法也存在自然问题。

当然,F#有一些从OO语言中借鉴的功能和想法,而C#有从功能上借鉴的想法和功能。

比较Python和C#更多的是关于动态和静态类型之间的区别(尽管python确实提供了一些C#仍然没有的功能)。动态类型通常更容易处理内省/反射活动和运行时修改,同时增加由于拼写错误或“常规”代码中使用的错误对象而导致的运行时错误的风险。

静态语言通常具有动态语言所没有的开发人员开销。开销似乎通常是由于必须创建层来抽象东西并创建继承层次结构和接口以使用所需/想要的抽象。因为你试图避免对类型的依赖。

似乎静态语言在大型团队中更容易管理。此外,您可以通过所有检查和工具轻松获得重构的优势。