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.pswp.cn/news/457925.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/457925.shtml
英文地址,請注明出處:http://en.pswp.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;通過兩條不同的總線…