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

在.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 -\u0026gt; int -\u0026gt; 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/457925.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php签入html出来的影响seo吗_搜索引擎优化_SEO必备6大技能+SEO误区讲解!

大家好,我是逆冬,今天来分享一下实战SEO需要掌握什么样的技能以及SEO知识误区,本篇文章仅代表逆冬本人几年的经验、不见得适合每一个SEOer!下面就让逆冬本人来分析一下实战型SEO到底需要掌握什么技能。第1点:SEO需要不需要熟练掌握…

编写linux驱动程序步骤

一、建立Linux驱动框架(装载、卸载Linux驱动) Linux内核在使用驱动时首先要装载驱动,在装载过程中进行一些初始化动作(建立设备文件、分配内存等),在驱动程序中需提供相应函数来处理驱动初始化工作&#xf…

一种M2M业务的架构及实现M2M业务的方法

http://www.cnblogs.com/coryxie/p/3849764.html 技术领域 [0001] 本发明涉及通信技术领域,尤其涉及一种M2M业务的架构及实现M2M业务的方法。 背景技术 [0002] 随着通信技术的飞速发展以及通信技术与互联网技术的进一步融合,移动业务以及移动互联网技术普…

第二章 mybatis使用注解实现in查询(mysql)

mybatis实现in查询&#xff0c;两种方法&#xff1a; xml形式&#xff08;推荐&#xff09;注解方式&#xff08;个人喜欢注解&#xff0c;但是in场景可能不太适合注解&#xff09;代码&#xff1a; 1 Select("<script>" 2 "SELECT ID…

python面试代码题_python面试基础篇80题

1.为什么学习python?3.Python和Java、PHP、C、C#、C等其他语言的对比&#xff1f; C语言由于其底层操作特性和历史的积累&#xff0c;在嵌入式领域是当之无愧的王者。 PHP跨平台&#xff0c;性能优越&#xff0c;跟linux/unix结合比跟windows结合性能强45%,开发成本低,php5已经…

主设备号与次设备号以及申请

一个字符设备或者块设备都有一个主设备号和次设备号。主设备号和次设备号统称为设备号。主设备号用来表示一个特定的驱动程序。次设备号用来表示使用该驱动程序的各设备。例如一个嵌入式系统&#xff0c;有两个LED指示灯&#xff0c;LED灯需要独立的打开或者关闭。那么&#xf…

javascript 变量作用域

为什么80%的码农都做不了架构师&#xff1f;>>> javascript中的变量的作用域不同于java/c的变量规则。 1、在java/c中&#xff0c;如果有一个全局变量与一个局部变量重名&#xff0c;那么在局部变量的作用域中&#xff0c;局部变量会覆盖掉全局变量的值。当离开局部…

七月算法--12月机器学习在线班-第五次课笔记—回归

七月算法--12月机器学习在线班-第五次课笔记—回归 七月算法&#xff08;julyedu.com&#xff09;12月机器学习在线班学习笔记 http://www.julyedu.com 转载于:https://www.cnblogs.com/sweet-dew/p/5491271.html

集合添加元素python_Python基础:列表、字典、元组、集合、添加和删除元素,增删...

列表&#xff08;有序&#xff09; 添加 list.append(元素)&#xff1a;在列表末尾添加新的元素 list.extend(seq)&#xff1a;在列表末尾一次性追加另一个序列中的多个值 –seq可以是列表、元组、字典&#xff0c;若为字典,则仅会将键(key)作为元素依次添加至原列表的末尾。 l…

file_operations结构体分析 (设备文件的操作)

linux设备驱动中file_operations结构体分析 struct module *owner第一个 file_operations 成员根本不是一个操作; 它是一个指向拥有这个结构的模块的指针. 这个成员用来在它的操作还在被使用时阻止模块被卸载. 几乎所有时间中, 它被简单初始化为 THIS_MODULE, 一个在 <Linux…

公司网络搭建及×××到公司配置

一、公司路由器及子网配置公司192.168.1.0/24子网用于服务器集群&#xff0c;192.168.0.0/24子网用于办公子网&#xff0c;两个子网物理上不在一块。公司开业时&#xff0c;申请了电信40Mbps专线光纤&#xff0c;5个IP地址&#xff0c;网关&#xff1a;*.168.112.9 255.255.25…

js——全选框 checkbox

一直会碰见input 全选框的问题&#xff0c;先整理一种情况&#xff1a; 1. <input id"selectAll" type"checkbox" />全选 2. <input typecheckbox idid1 namecb value1 />value1 <input typecheckbox idid2 namecb value2 />value2 &…

手机编写python程序_Python实现自动上京东抢手机

本文实例为大家分享了Python自动上京东抢手机的具体代码&#xff0c;供大家参考&#xff0c;具体内容如下 上次抢荣耀V9&#xff0c;被京东给恶心到了&#xff0c;所以就写了个简单的Python来自动抢V9。虽然用的是比较蠢的方法&#xff0c;但觉得还是有可以学习的地方。所以在这…

struct cdev结构体和cdev_init和cdev_add函数

在Linux内核2.6版本以前&#xff0c;注册一个字符设备的的经典方法是使用register_chrdev&#xff0c;相应的从设备中注销字符设备的方法是unregister_chrdev&#xff0c;而在2.6版本以后&#xff0c;字符设备函数的注册与注销使用的是如下一套方法&#xff1a; #include<li…

蓝鸥零基础学习HTML5第五讲 CSS的基础样式

蓝鸥零基础学习HTML5第五讲 CSS的基础样式1.border<!DOCTYPE html><html lang"en"><head><meta charset"UTF-8"><title>Document</title><style>div {width:0px;height:0px;/*background: url("img/1.jpg…

class_create()函数

内核中定义了struct class结构体&#xff0c;一个struct class 结构体类型变量对应一个类&#xff0c;内核同时提供了class_create()函数&#xff0c;可以用它来创建一个类&#xff0c;这个类存放于sysfs下面&#xff0c;一旦创建了这个类&#xff0c;再调用device_create()函数…

C# 使用Conditional特性而不是#if条件编译

概述 #if/#endif 语句常用来基于同一份源码生成不同的编译结果&#xff0c;其中最常见的就是debug版和release版。但是这些工具在实际应用中并不是非常友好&#xff0c;因为它们容易被滥用&#xff0c;其代码页进而难以理解或调试。C#设计中考虑到这个问题&#xff0c;并提供了…

python安装opencv出现错误_Python3安装OpenCV出错,如何解决?

$ sudo pip install opencv-python $ sudo pip install opencv-contrib-python 参考下&#xff1a;python作业毕设&#xff1a;安装人工智能图像处理工具OpenCV​zhuanlan.zhihu.compython版本安装 适合所有平台&#xff1a; $ sudo pip install opencv-python $ sudo pip inst…

PHP中面向对象的图片处理类

我们对图片的处理主要是添加水印和等比缩放&#xff0c;在PHP中&#xff0c;封装一个类来实现两个功能。源代码如下&#xff1a;<?php/***图片处理*/ class Image {//路径private $path ./upload/;//随机文件名private $isRandName;//初始化成员方法public function __con…

ioread32函数有关知识

x86体系和ARM体系的寻址方式是有差别的&#xff1a; 在x86下&#xff0c;为了能够满足CPU高速地运行&#xff0c;内存与CPU之间通过北桥相连并通过地址方式访问&#xff0c;而外设通过南桥与CPU相连并通过端口访问。 在ARM下也实现了类似的操作&#xff0c;通过两条不同的总线…