写点什么

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

  • 2016-09-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-09-18 19:002922
用户头像

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

关注

评论

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

linux之我常用的20条命令(之二)

入门小站

Linux

架构实战营毕业总结

技术是伙伴

Apache RocketMQ 荣获 2021 中国开源云联盟优秀开源项目

阿里巴巴云原生

Apache 开源 RocketMQ 资讯

尝鲜Windows 11一个月,被这3项巨变圈粉了....

Jackpop

基于消息队列 RocketMQ 的大型分布式应用上云最佳实践

阿里巴巴云原生

阿里云 RocketMQ 云原生 消息队列 上云

Apache APISIX 在腾讯云智能钛平台中的落地实践

API7.ai 技术团队

腾讯云 网关 API网关 Apache APISIX

架构实战营 - 模块七作业

en

#架构实战营

工厂模式——猫粮公司的演进

蝉沐风

Java 设计模式 工厂模式 工厂方法模式

把选择题变成问答题

FunTester

Java Python 测试 FunTester

一部亚马逊4.5高分的领域经典,首次落地中国

博文视点Broadview

Python代码阅读(第52篇):返回列表的头部和尾部

Felix

Python List Code 列表 阅读代码

在线文本纵向排版工具

入门小站

工具

Android端信号处理总结

轻口味

android 音视频 11月日更

让华为举步维艰,Android曾距离成为国产系统仅一步之遥!

Jackpop

苏丹2021年10月25政变断网事件

郑州埃文科技

【Flutter 专题】19 图解【分享页面】底部对话框

阿策小和尚

Flutter 小菜 0 基础学习 Flutter Android 小菜鸟 11月日更

【LeetCode】有效的完全平方数Java题解

Albert

算法 LeetCode 11月日更

CSS架构之Theme层

Augus

CSS 11月日更

算法入门-插入排序

ES_her0

11月日更

架构训练营毕业总结

Clarke

架构实战营

Redis 日志篇:AOF 与 RDB 让数据持久化不丢失

码哥字节

redis 后端 Redis 核心技术与实战 11月日更

架构实战营 王者荣耀商城异地多活架构设计

💤 ZZzz💤

架构实战营

毕业总结

脉动

第三期3天AI进阶实战营-Day1任务卡

IT蜗壳-Tango

11月日更

如何免费下载学术文献?

Jackpop

系统架构面临的三大挑战,看 Kubernetes 监控如何解决?

阿里巴巴云原生

阿里云 Kubernetes 云原生 系统架构

iOS开发:用XIB拖控件关联时报错:“Could not insert new outlet connection…”解决方法

三掌柜

11月日更

新书 | 这绝对是读起来最有趣的计算机科普绘本

图灵教育

少儿编程 绘本 逻辑启蒙

[ 工程师书单推荐] - 年轻人,你渴望力量吗?

baiyutang

11月日更

【设计模式】第十篇 - 外观模式 - 我来组成头部

Brave

设计模式 外观模式 11月日更

实验室lims系统解决方案

低代码小观

实验室管理系统 企业管理 LIMS实验室信息管理系统 LIMS系统 信息管理系统

F#创建者Don Syme谈F#设计原则_.NET_Pierre-Luc Maheu_InfoQ精选文章