分享
 
 
 

在.NET平台上使用Scala语言(上):初尝

王朝学院·作者佚名  2009-12-19
窄屏简体版  字體: |||超大  

Scala是Java平台上的一门新兴起的语言,我也不止一次在博客上提到它。我非常希望它可以取代Java这种劣质语言,让Java平台的生产力上一个台阶。事实上,Scala从一开始——或者说“很早”就对生成.NET程序集提供了支持。只可惜,毕竟还是Java平台的东西,.NET方面的资源少之又少,不过我们还是可以进行一番尝试的。

有人经常把F#和Scala进行比较——可能都是新语言吧,毕竟C#和Java之争也有很长的历史沉淀了。不过,我倒不认为两者有什么可比性。F#是一门“拥有面向对象特性的函数式编程语言”,而Scala是一门“拥有函数式编程特性的面向对象编程语言”。事实上,从设计思路来说,Scala与C#或Java是同根的,与C#在函数式编程方便更有可比性——虽然它在追求语言灵活性的道路上走得有些极端。因此,我认为Scala可以定位作Java语言的替代品,而F#却不是C#的替代品。因为一旦F#替代了C#,便几乎代表函数式编程范式替代了面向对象编程范式。

Scala语言的名字取做“Scalable”,暗指这是一门“伸缩性”强的语言。为什么说它伸缩性强呢?我的理解是它希望可以做几乎“任何形式/风格”的程序设计。这点并非玩笑,Scala的确在走这条路。Scala的语言非常灵活,语法的“变化”非常复杂。我一直说,这门语言实在是太甜了——到处是糖,而且可谓“无所不用其极”。Scala似乎希望在一切可以节省的地方,如括号,标识符,进行节省。还例如,Scala的import支持引入整个包,包的一部分,整个包但排除某个类,甚至在方法内部引入成员。再例如成员的访问级别,除了典型的public,protected,private之外,它还引入了“当前对象”这种访问级别(private是相同“类”)。

但是,要知道Scala最终还是编译为Java平台上的二进制格式,也就是说Scala的功能事实上是受平台限制的。因此,使用Scala一些高级功能编译出的结果,其实是无法被Java语言体现出来的——这也是我为什么会说Scala的定位像是“取代”Java,而不是与Java共存。

至于我尝试Scala.NET的原因在于:

熟悉Scala语言。目前有一些有趣的,有用的类库是用Scala实现的,相信以后也会越来越多。

借Scala语言及.NET平台与Java平台的差异。

观察Scala一些语言特性在IL上的表现——毕竟.NET领域对于IL的追求,比Java领域追求Byte Code有群众基础得多,且我更熟悉.NET平台。

此外,由于难免需要在Java平台上编写程序,如果可以用Scala的话,我真的不想再使用Java语言了。

对于Scala@.NET来说,Scala官方文档上的指导是基于Scala 1.4(最新的Scala是2.7.7)的,已经完全不可用。如果在互联网上查找内容,也寥寥无几。最终我借助这篇文章起步。

首先,你需要先去下载Scala的SDK,并将其解压缩。例如,我现在将它存放在D:\scala-2.7.7.final中,其中包含几个目录,比较重要的有:

bin <- 各工具及脚本

lib <- 工具或类库的jar包

src <- 源文件

code <- 我创建的文件夹,用于存放测试代码首先,Scala SDK中并不直接包含“好用”的辅助脚本,我们需要使用sbaz.bat获取.NET的支持脚本。sbaz.bat会调用sbaz.jar包里的程序,它相当于Scala的包或脚本管理器。于是:

D:\scala-2.7.7.final> bin\sbaz.bat install scala-msil执行后,bin目录下会多出scalac-net.bat及其他一些文件,在lib目录下则多出三个文件,分别是mscorlib.dll,predef.dll和scalaruntime.dll。然后我们在code目录下放置一个test.scala文件,内容是:

import System.Console

object test extends Application {

override def main(args: Array[String]) = {

Console.WriteLine("Hello .NET World!")

}

}然后使用scalac-net.bat将它编译成IL文件:

D:\scala-2.7.7.final\code> ..\bin\scalac-net.bat test.scala这样在code目录下便生成了test.msil,再使用ilasm便可以将其转化为.NET程序集了:

D:\scala-2.7.7.final\code> ilasm test.msil /exe最后,还需要将在lib目录里的3个dll文件复制到与test.exe的相同目录中。

运行,成功。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有