GMTC北京站两周后开幕,58个议题全部上线,点击查看 了解详情
写点什么

F#创建者 Don Syme 谈 F#设计原则

2016 年 9 月 18 日

在.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

2016 年 9 月 18 日 19:001835
用户头像

发布了 1008 篇内容, 共 317.4 次阅读, 收获喜欢 287 次。

关注

评论

发布
暂无评论
发现更多内容

第八周作业

andy

极客大学

Week 08 命题作业

Jeremy

国家版权局发布《关于规范摄影作品版权秩序的通知》

CECBC区块链专委会

电子存证 作品版权 侵权盗版 剑网2019

一周信创舆情观察(7.20~7.26)

统小信uos

天天用SpringBoot,它的自动装配你能说出来吗?

java金融

Java spring springboot 自动装配 EnableAutoConfiguration

Flink 1.11 SQL 使用攻略

Apache Flink

flink

NameNode和SecondaryNameNode工作机制

古月木易

NameNode econdaryNameNode

shell实现SSH自动登陆

阿呦,简笔话_Golden

Java开发Spark ELT实践(一)

团子粑粑

大数据 Apache Spark

架构师训练营第八章作业

itrickzhang

保障服务稳定之服务限流

X先生

架构设计 服务设计 后端开发 限流算法

架构师训练营 -- 第八周作业

stardust20

Week 08 学习总结

Jeremy

你好,工作!

小天同学

工作 心态 自我思考

面经手册 · 开篇《面试官都问我啥》

小傅哥

面试题 Java 面试 面试经验 面试官

NameNode和SecondaryNameNode工作机制

奈学教育

NameNode

第八周总结

andy

极客大学

架构训练营第八周作业

张锐

第八周作业

赵龙

第八周学习总结

赵龙

设计过度有时比设计不足更可怕

菜根老谭

架构思维 过度设计 演化思维 设计不足

世界上最狠的语言

十三

架构师训练营 - 第八周 - 学习总结

stardust20

什么样的信任才值得拥有?谈一谈极客邦的5K1S文档

霍太稳@极客邦科技

Django框架,Flask框架和Tornado框架各有什么优缺点

奈学教育

django flask tornado

JVM详解之:汇编角度理解本地变量的生命周期

程序那些事

Java JVM 汇编 生命周期

Django框架,Flask框架和Tornado框架各有什么优缺点

古月木易

django flask tornado

央行数字货币或将成为经济“内循环”的未来加速器

CECBC区块链专委会

数字经济 全球经济下行 降息 惠普金融深化

乘商用之风,破后疫情之浪:丁耘分享华为如何持续护航5G新价值

脑极体

行为型模式:迭代器模式解析

七哥爱编程

Java 编程 程序员 设计模式 迭代器模式

架构师训练营第八章总结

itrickzhang

Service Mesh的演化与未来

Service Mesh的演化与未来

F#创建者Don Syme谈F#设计原则-InfoQ