在.Net Fringe 2016 大会上,F#创建者 Don Syme谈了他对F#现状的看法以及F#的二元性。F#是以一个为面向对象语言构建的运行时为基础构建的函数式语言。
F#是 2010 年发布的,遵循开源许可协议。F#比.Net 更早地踏上了开源之路,C#和.Net 在 2015 年才开源。将 F#开源主要是为了增加其公信力。那时,一门语言想要得到开发人员和企业的重视,开源是必须的。
为.NET 带来一门新语言的计划由来已久。函数式编程语言是隔离的,运行在自己的 VM 里。互操作标准(C 调用、COM、CORBA、XML)让语言集成变得困难。
F#的做法是使用一个已经被广泛采用的运行时,并在必要时采取折衷的办法。该语言在设计时就考虑了互操作性。像 Scala 和 Swift 这类较新的语言经常采用这种方法。
F#的做法是将对象包含进来,让它们适应于面向表达式的类型化函数式编程。虽为函数式语言,但 F#也支持类、抽象类和接口。
// 类定义 type Vector2D (dx:double, dy:double) = let d2 = dx*dx + dy*dy // 对象固有属性 // 导出属性 member v.DX = dx member v.DY = dy member v.Lenght = sqrt d2 member v.Scale(k) = Vector2D (dx * k, dy * k) // 导出方法
F#支持类、接口和抽象类。它还有一个值得注意的新增特性对象表达式,让开发人员可以匿名定义上述类型。
type IMathExample = // 抽象方法 abstract member Add: int -> int -> int // 抽象不可变属性 abstract member Pi : float // 使用对象表达式的接口实现 let obj = { new IMathExample with member this.Add x y = x + y member this.Pi = 3.14 }
由于 F#语言几年来一直在发展,所以 Syme 简单介绍了该语言的现状:
- 开放、跨平台、中立、独立;
- F#接受贡献;
- 由非盈利性组织 F#软件基金会管理;
- 通过 Xamarin 提供移动开发和工具支持;
- 由来自微软的 Visual F#工具提供 Windows 和 Azure 支持;
- F#编译服务是许多 F#工具项目的基础;
- F# 4.1 的开发正在进行中。
在谈及语言独立性时,Syme 创造了一个新术语。他将“拟态独立性(mimetic independence)”定义为一种能力,借助这种能力可以将一种技术定义为独立于另外一种技术、联盟或既定利益的理念。虽然 F#实现了拟态独立性,但我们仍然必须承认微软对此作出的巨大贡献。作为一个反例,Visual Basic 就不符合这个条件,因为它完全依赖于微软。
查看英文原文: Don Syme Presents F# Design Principles at .Net Fringe
评论