您所在的位置:开发 > Java > Java+ > Scala vs F#:函数式编程特性大比拼(二)(1)

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

2010-07-09 14:12 黄永兵 51CTO译文 字号:T | T
一键收藏,随时查看,分享好友!

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

AD:

【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支持伪多重继承。



分享到:

热点职位

更多>>

热点专题

更多>>

读书

鸟哥的Linux私房菜 基础学习篇(第二版)
本书全面而详细地介绍了Linux操作系统。全书分为5个部分:第一部分着重说明Linux的起源及功能,如何规划和安装Linux主机;第二部

51CTO旗下网站

领先的IT技术网站 51CTO 领先的中文存储媒体 WatchStor 中国首个CIO网站 CIOage 中国首家数字医疗网站 HC3i