中国领先的IT技术网站
|
|

Scala vs F#:函数式编程特性大比拼(二)

本文是51CTO独家译稿,讲述Scala和F#函数式编程特性对比的第二部分。第一部分从函数、赋值、Lambda表达式、模式匹配、列表推导和混合实现多重继承来对Scala和F#进行对比。本文将从开发框架、数据库操作、GUI开发、Web开发和面向对象特性等方面对Scala和F#进行对比。

作者:黄永兵来源:51CTO译文|2010-07-09 14:12


【51CTO译文】在前文里,51CTO从函数、赋值、Lambda表达式、模式匹配、列表推导和混合实现多重继承来对Scala和F#进行对比。而比较Scala和F#编程语言时,开发人员最感兴趣的可能是开发环境的对比,如:

◆为Web,GUI和数据库开发提供的框架

◆对面向对象的支持

◆运行时环境的特性

F#是微软主持开发的函数式编程语言,只能运行在Windows平台上,而开源的Scala可以运行在所有平台上,不过Scala最终是被编译成Java字节码的,因此需要通过Java虚拟机进行解释执行。

应用程序开发框架

F#是一个.NET通用语言运行时(CLR)兼容的语言,适合开发各种常见的应用系统,实际上,.NET开发人员可以在Visual Studio(2008和更高版本)中象开发C#,C++或Visual Basic程序一样,开发、调试、测试和以CLR可执行程序形式部署F#程序。(您可以参考51CTO推荐:详细介绍Visual Studio 2010F#使用

F#和其它.NET语言的区别是它的函数执行是不变的,无状态的,这个特性使得F#更适合科学计算,大规模并行计算和高性能计算应用。除了函数式编程特定的任务和语法外,F#也可以访问.NET DLL,访问和使用方式均与其它.NET语言无差别。

Scala作为一个开源的,兼容Java且编译成Java的语音,可用在任何支持Java的操作系统上,Scala开发插件和语法定义文件也可用大部分流行的文本编辑器和IDE创建,包括Netbeans,Eclipse和IntelliJ的IDEA。

数据库操作

F#数据库访问程序是语言的核心部分,它们是通过System.Data and System.Data.SqlClient库访问数据库的,F#数据库访问实现取决于底层ADO.NET机制和.NET运行时的配置。

由于Scala运行在Java虚拟机(JVM)上,它利用Java的JDBC访问数据库,数据库例行程序要么直接通过JDBC调用,要么通过Java或其它第三方数据库扩展调用,有几个第三方开源的库可用,但我不敢肯定它们已经成熟和稳定。

GUI开发

使用F#进行GUI开发是通过.NET的WinForm库支持的,GUI开发API位于System.Drawing and System.Windows.Forms库中,它是一个标准的共享.NET DDL。

使用Scala进行GUI开发是通过Java Swing实现的,访问Swing组件和API都使用Scala语法,因此Scala程序员开发Swing感觉会很自然。

Web开发

使用F#进行Web开发,就象数据库开发和GUI开发一样,它是通过.NET System.Web库完成的,ASP开发人员可以指定F#作为服务器端语言,执行HTTP处理逻辑。

Scala没有任何专门的Web开发组件,但有基于Scala的第三方Web开发框架,在撰写本文时,Lift Web框架是最有名的Scala Web开发框架。

面向对象特性

虽然F#是一个函数式编程语言,但它也支持常见的面向对象(OO)的特性,如单继承类,多重继承接口和参数多态等。和C#和Visual Basic类似,F#也支持委派,通过语言提供的Invoke委派方法提供对对象属性的隐式访问,但和Scala不一样,F#不支持任何形式的多类继承。

Scala一种混合函数式编程和面向对象编程风格的语言,因此它的函数和函数编程特性是第一类语言结构,面向对象的也是,Scala中的每一个值都是对象,此外,Scala支持参数多态,枚举和伪多重继承。

在我看来,F#和Scala中面向对象特性最大的差别是Scala支持伪多重继承。

编译和程序的执行

F#编译器和运行时都是.exe或.msi格式,目前只支持Windows平台,要在Mac或Linux平台上运行F#唯一的办法是使用Mono .NET CLR实现,F#程序的扩展名是.fs,在Windows平台上编译后是.exe文件,开发工具一般使用Visual Studio 2008(或更高版本),但也可以用其它编辑器创建,或使用独立的CLR编译器编译。

F#的安装是通过installFSharp.msi或fsharp.zip实现的,它包含了一个交互式编译器,因此F#程序可以通过控制台编写和执行。

Scala只需要下载一个JAR文件就可以了,当然也有二进制分发包,无论哪种形式,Scala编译器/解释器都运行在JVM之上。

Scala需要Java 1.5或更高版本,但这里也有一个专为Java 1.4制作的版本。

Scala程序也可以通过交互式解释器REPL(read-eval-print-loop)交互运行,序也可以和其它类文件一起编译成Jar文件,然后作为Java程序调用。

典型应用和适用领域

F#是最近才加入到.NET语言大家族中的,因此它仍然处于初级阶段,微软研究院内部在使用F#进行日志分析和自定义搜索任务,但微软计划将F#作为多核和高性能计算的专用语言。

据传,在编程社区 – 特别是那些熟悉函数编程和ML编程衍生语言的社区中,对F#的反应非常积极,但由于它只能运行在.NET平台上,可能会形成一个障碍,因为主流的科学和高性能平台都是基于Linux的。

在Scala和F#之间,Scala的使用程度远远超过了F#,Twitter的整个信息处理系统都是用Scala实现的,很多高知名度的组织,如西门子,索尼,施乐和美国航天局都在各种小规模项目中使用了Scala。

因为Scala与Java集成非常灵活,它可以用于任何类型的项目中,根据历史经验,Scala凭借其简洁的语法,可以大量减少代码行数。

性能

虽然Java虚拟机可运行在所有平台上,但它不能为Scala带来明显的性能优势,甚至没有提供开箱即用的优化配置,但F#在.NET和Windows平台上却可以事先优化,在Windows上.NET运行时环境范围内,F#很可能受益于CLR专门针对它的内部优化。

由于F#天生并不支持Linux,因此比较Linux平台上Scala和F#的性能可能会有失公平,有些中立人士表示Linux上的Mono CLR比Windows平台上的.NET CLR要慢得多,根据专业级的基准测试,在Linux上,F#比Scala慢三倍。

原文出处:www.developer.com/

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

作者:Edmon Begoli

【51CTO译稿,非经授权谢绝转载,合作媒体转载请注明原文出处、作者及51CTO译稿和译者!】

【编辑推荐】

  1. Scala vs F#:函数式编程特性大比拼(一)
  2. 用Java在各种框架下编译Scala项目
  3. 浅谈Visual Studio 2010下F#代码智能纠错
  4. Visual Studio 2010中F#十三项新特性详解
  5. Scala:Java+函数式=后函数式?
【责任编辑:立方 TEL:(010)68476606】

点赞 0
分享:
大家都在看
猜你喜欢

读 书 +更多

《网管员必读——网络管理》

本书在全面介绍微软最新网络操作系统Windows Server 2003的基础上,简要地介绍了UNIX和Linux两大操作系统的代表产品:Sun(太阳)公司的Sol...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊
× 学习达标赢Beats耳机