InfoQ 编辑部出品——2021年度技术盘点与展望 了解详情
写点什么

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

  • 2016 年 9 月 18 日
  • 本文字数:986 字

    阅读完需:约 3 分钟

在.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:001943
用户头像

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

关注

评论

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

Serverless 崛起背后的五大挑战

Serverless Devs

Serverless

免费分享学习Java框架Netty的优秀图书

Java入门到架构

Java 书籍推荐

JAVA 九种排序算法详解(中)

加百利

Java 数组 排序 7月日更

系统故障防不胜防?不存在的,让大佬来给你上一课!

数列科技

高可用 测试 全链路压测 测试工具 生产环境全链路压测

阿里P8耗时半年总结的Java核心面试知识,助我轻松拿下蚂蚁offer

Java 程序员 面试 java编程 java技术宅

合肥智慧社区平台建设解决方案,平安小区建设

13823153121

阿里技术分享:闲鱼IM基于Flutter的移动端跨端改造实践

JackJiang

flutter 即时通讯 IM

并发王者课-铂金6:青出于蓝-Condition如何把等待与通知玩出新花样

MetaThoughts

Java 多线程 并发

并发王者课-铂金8:峡谷幽会-看CyclicBarrier如何跨越重峦叠嶂

MetaThoughts

Java 并发 多线

并发王者课-铂金7:整齐划一-CountDownLatch如何协调多线程的开始和结束

MetaThoughts

Java 多线程 并发

真happy软件开发|真happy系统APP开发

数字化转型提升太平洋保险风险治理能力

数据湖洞见

大数据

论文解读丨文档结构分析

华为云开发者社区

模型 文档 文档结构分析 分割 文档结构

国家网信办:“滴滴出行” 下架整改!

学神来啦

Rust从0到1-Cargo-安装来自Crates.io的程序

rust cargo install

从零实现一个 k-v 存储引擎

roseduan

存储 Go 语言 KV存储引擎 存储系统

今天,「浪潮云说」直播间开讲啦!

浪潮云

云计算

CloudQuery 使用教程 No.4 数据查询(下)

CloudQuery社区

dba 数据库管理工具 国产数据库 运维开发

iOS不行?还是个人能力有限?

ios 程序员 IT 编程之路

iOS开发 · iOS音视频开发 - ARKit 教学:如何搭配SceneKit来建立一个简单的ARKit Demo

iOSer

ios ios开发 ARKit iOSAR.

2021秋招vue面试题+答案

zz1998

Vue Vue 3

Nacos配置中心交互模型是 push 还是 pull ?你应该这么回答

程序员内点事

Java 编程 程序员 分布式 nacos

Java开发从二面被拒到收割阿里架构offer,我花了一年时间,复盘成功经历!

Java架构追梦

Java 阿里巴巴 架构 offer 成长笔记

涨薪50%,从小厂逆袭,坐上美团L8技术专家(面经+心得)

Java 编程 程序员 面试

NumPy_2021.07.05

Flychen

《持之以恒的从事运动》二

Changing Lin

不愧是阿里内部“SpringCloudAlibaba学习笔记”竟然在GitHub霸榜月余

Java 编程 架构 微服务

DDD笔记

topsion

聊聊数据仓库中维度表设计的二三事

云祁

数据仓库 维度建模 7月日更

云图说 | 华为云医疗智能体智联大健康:AI医学影像

华为云开发者社区

AI 医学影像 医疗智能体 华为云医疗智能体 大健康

从结构体、内存池初始化到申请释放,详细解读鸿蒙轻内核的动态内存管理

华为云开发者社区

鸿蒙

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