自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Scala vs F#:函數(shù)式編程特性大比拼(二)

原創(chuàng)
開發(fā) 后端
本文是51CTO獨(dú)家譯稿,講述Scala和F#函數(shù)式編程特性對比的第二部分。第一部分從函數(shù)、賦值、Lambda表達(dá)式、模式匹配、列表推導(dǎo)和混合實(shí)現(xiàn)多重繼承來對Scala和F#進(jìn)行對比。本文將從開發(fā)框架、數(shù)據(jù)庫操作、GUI開發(fā)、Web開發(fā)和面向?qū)ο筇匦缘确矫鎸cala和F#進(jìn)行對比。

【51CTO譯文】在前文里,51CTO從函數(shù)、賦值、Lambda表達(dá)式、模式匹配、列表推導(dǎo)和混合實(shí)現(xiàn)多重繼承來對Scala和F#進(jìn)行對比。而比較Scala和F#編程語言時(shí),開發(fā)人員最感興趣的可能是開發(fā)環(huán)境的對比,如:

◆為Web,GUI和數(shù)據(jù)庫開發(fā)提供的框架

◆對面向?qū)ο蟮闹С?/p>

◆運(yùn)行時(shí)環(huán)境的特性

F#是微軟主持開發(fā)的函數(shù)式編程語言,只能運(yùn)行在Windows平臺上,而開源的Scala可以運(yùn)行在所有平臺上,不過Scala最終是被編譯成Java字節(jié)碼的,因此需要通過Java虛擬機(jī)進(jìn)行解釋執(zhí)行。

應(yīng)用程序開發(fā)框架

F#是一個(gè).NET通用語言運(yùn)行時(shí)(CLR)兼容的語言,適合開發(fā)各種常見的應(yīng)用系統(tǒng),實(shí)際上,.NET開發(fā)人員可以在Visual Studio(2008和更高版本)中象開發(fā)C#,C++或Visual Basic程序一樣,開發(fā)、調(diào)試、測試和以CLR可執(zhí)行程序形式部署F#程序。(您可以參考51CTO推薦:詳細(xì)介紹Visual Studio 2010F#使用

F#和其它.NET語言的區(qū)別是它的函數(shù)執(zhí)行是不變的,無狀態(tài)的,這個(gè)特性使得F#更適合科學(xué)計(jì)算,大規(guī)模并行計(jì)算和高性能計(jì)算應(yīng)用。除了函數(shù)式編程特定的任務(wù)和語法外,F(xiàn)#也可以訪問.NET DLL,訪問和使用方式均與其它.NET語言無差別。

Scala作為一個(gè)開源的,兼容Java且編譯成Java的語音,可用在任何支持Java的操作系統(tǒng)上,Scala開發(fā)插件和語法定義文件也可用大部分流行的文本編輯器和IDE創(chuàng)建,包括Netbeans,Eclipse和IntelliJ的IDEA。

數(shù)據(jù)庫操作

F#數(shù)據(jù)庫訪問程序是語言的核心部分,它們是通過System.Data and System.Data.SqlClient庫訪問數(shù)據(jù)庫的,F(xiàn)#數(shù)據(jù)庫訪問實(shí)現(xiàn)取決于底層ADO.NET機(jī)制和.NET運(yùn)行時(shí)的配置。

由于Scala運(yùn)行在Java虛擬機(jī)(JVM)上,它利用Java的JDBC訪問數(shù)據(jù)庫,數(shù)據(jù)庫例行程序要么直接通過JDBC調(diào)用,要么通過Java或其它第三方數(shù)據(jù)庫擴(kuò)展調(diào)用,有幾個(gè)第三方開源的庫可用,但我不敢肯定它們已經(jīng)成熟和穩(wěn)定。

GUI開發(fā)

使用F#進(jìn)行GUI開發(fā)是通過.NET的WinForm庫支持的,GUI開發(fā)API位于System.Drawing and System.Windows.Forms庫中,它是一個(gè)標(biāo)準(zhǔn)的共享.NET DDL。

使用Scala進(jìn)行GUI開發(fā)是通過Java Swing實(shí)現(xiàn)的,訪問Swing組件和API都使用Scala語法,因此Scala程序員開發(fā)Swing感覺會很自然。

Web開發(fā)

使用F#進(jìn)行Web開發(fā),就象數(shù)據(jù)庫開發(fā)和GUI開發(fā)一樣,它是通過.NET System.Web庫完成的,ASP開發(fā)人員可以指定F#作為服務(wù)器端語言,執(zhí)行HTTP處理邏輯。

Scala沒有任何專門的Web開發(fā)組件,但有基于Scala的第三方Web開發(fā)框架,在撰寫本文時(shí),Lift Web框架是最有名的Scala Web開發(fā)框架。

面向?qū)ο筇匦?/strong>

雖然F#是一個(gè)函數(shù)式編程語言,但它也支持常見的面向?qū)ο螅∣O)的特性,如單繼承類,多重繼承接口和參數(shù)多態(tài)等。和C#和Visual Basic類似,F(xiàn)#也支持委派,通過語言提供的Invoke委派方法提供對對象屬性的隱式訪問,但和Scala不一樣,F(xiàn)#不支持任何形式的多類繼承。

Scala一種混合函數(shù)式編程和面向?qū)ο缶幊田L(fēng)格的語言,因此它的函數(shù)和函數(shù)編程特性是***類語言結(jié)構(gòu),面向?qū)ο蟮囊彩?,Scala中的每一個(gè)值都是對象,此外,Scala支持參數(shù)多態(tài),枚舉和偽多重繼承。

在我看來,F(xiàn)#和Scala中面向?qū)ο筇匦?**的差別是Scala支持偽多重繼承。

#p#

編譯和程序的執(zhí)行

F#編譯器和運(yùn)行時(shí)都是.exe或.msi格式,目前只支持Windows平臺,要在Mac或Linux平臺上運(yùn)行F#唯一的辦法是使用Mono .NET CLR實(shí)現(xiàn),F(xiàn)#程序的擴(kuò)展名是.fs,在Windows平臺上編譯后是.exe文件,開發(fā)工具一般使用Visual Studio 2008(或更高版本),但也可以用其它編輯器創(chuàng)建,或使用獨(dú)立的CLR編譯器編譯。

F#的安裝是通過installFSharp.msi或fsharp.zip實(shí)現(xiàn)的,它包含了一個(gè)交互式編譯器,因此F#程序可以通過控制臺編寫和執(zhí)行。

Scala只需要下載一個(gè)JAR文件就可以了,當(dāng)然也有二進(jìn)制分發(fā)包,無論哪種形式,Scala編譯器/解釋器都運(yùn)行在JVM之上。

Scala需要Java 1.5或更高版本,但這里也有一個(gè)專為Java 1.4制作的版本。

Scala程序也可以通過交互式解釋器REPL(read-eval-print-loop)交互運(yùn)行,序也可以和其它類文件一起編譯成Jar文件,然后作為Java程序調(diào)用。

典型應(yīng)用和適用領(lǐng)域

F#是最近才加入到.NET語言大家族中的,因此它仍然處于初級階段,微軟研究院內(nèi)部在使用F#進(jìn)行日志分析和自定義搜索任務(wù),但微軟計(jì)劃將F#作為多核和高性能計(jì)算的專用語言。

據(jù)傳,在編程社區(qū) – 特別是那些熟悉函數(shù)編程和ML編程衍生語言的社區(qū)中,對F#的反應(yīng)非常積極,但由于它只能運(yùn)行在.NET平臺上,可能會形成一個(gè)障礙,因?yàn)橹髁鞯目茖W(xué)和高性能平臺都是基于Linux的。

在Scala和F#之間,Scala的使用程度遠(yuǎn)遠(yuǎn)超過了F#,Twitter的整個(gè)信息處理系統(tǒng)都是用Scala實(shí)現(xiàn)的,很多高知名度的組織,如西門子,索尼,施樂和美國航天局都在各種小規(guī)模項(xiàng)目中使用了Scala。

因?yàn)镾cala與Java集成非常靈活,它可以用于任何類型的項(xiàng)目中,根據(jù)歷史經(jīng)驗(yàn),Scala憑借其簡潔的語法,可以大量減少代碼行數(shù)。

性能

雖然Java虛擬機(jī)可運(yùn)行在所有平臺上,但它不能為Scala帶來明顯的性能優(yōu)勢,甚至沒有提供開箱即用的優(yōu)化配置,但F#在.NET和Windows平臺上卻可以事先優(yōu)化,在Windows上.NET運(yùn)行時(shí)環(huán)境范圍內(nèi),F(xiàn)#很可能受益于CLR專門針對它的內(nèi)部優(yōu)化。

由于F#天生并不支持Linux,因此比較Linux平臺上Scala和F#的性能可能會有失公平,有些中立人士表示Linux上的Mono CLR比Windows平臺上的.NET CLR要慢得多,根據(jù)專業(yè)級的基準(zhǔn)測試,在Linux上,F(xiàn)#比Scala慢三倍。

原文出處:www.developer.com/

原文名:Scala vs. F#, Round 2: Application Programming Features

作者:Edmon Begoli

【51CTO譯稿,非經(jīng)授權(quán)謝絕轉(zhuǎn)載,合作媒體轉(zhuǎn)載請注明原文出處、作者及51CTO譯稿和譯者!】

【編輯推薦】

  1. Scala vs F#:函數(shù)式編程特性大比拼(一)
  2. 用Java在各種框架下編譯Scala項(xiàng)目
  3. 淺談Visual Studio 2010下F#代碼智能糾錯
  4. Visual Studio 2010中F#十三項(xiàng)新特性詳解
  5. Scala:Java+函數(shù)式=后函數(shù)式?
責(zé)任編輯:佚名 來源: 51CTO譯文
相關(guān)推薦

2010-07-07 13:11:20

ScalaF#C#

2011-06-09 09:52:41

F#

2009-02-06 14:26:37

UbuntuVistaWindows7

2010-01-07 10:04:18

F#函數(shù)式編程

2011-12-06 09:55:03

Ubuntu vs.F性能測試

2010-03-18 14:54:46

主流無線技術(shù)

2018-06-08 11:05:00

2021-03-02 09:00:00

開源框架技術(shù)

2011-01-19 11:10:30

2010-09-08 15:41:28

SIP協(xié)議棧

2014-01-07 17:08:02

Java開源框架

2017-09-10 14:29:03

眼力

2010-05-28 11:09:51

SVN功能

2021-03-15 21:07:17

IT行業(yè)薪酬薪水

2010-08-25 16:12:34

職場

2011-11-08 10:29:44

2023-05-26 15:53:48

MidjourneyAI圖像

2009-11-09 17:51:51

F#函數(shù)式編程

2016-03-15 13:08:57

Linux桌面環(huán)境LXDE

2010-06-01 14:39:15

NoSQL
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號