银河

SKYIV STUDIO

  博客园 :: 首页 :: 博问 :: 闪存 :: :: :: 订阅 订阅 :: 管理 ::
  268 随笔 :: 2 文章 :: 2606 评论 :: 48 引用

前几天,老赵发表了两篇文章:在.NET平台上使用Scala语言(上):初尝在.NET平台上使用Scala语言(下):分析

我拜读了以后,对 Scala 语言也感兴趣。于是就开始了尝试。

在 Ubuntu 9.10 操作系统上安装 Scala SDK 是非常简单的一件事:

ben@ben-m4000t:~$ sudo apt-get install scala
ben@ben-m4000t:~$ scalac -version
Scala compiler version 2.7.5final -- (c) 2002-2008 LAMP/EPFL
ben@ben-m4000t:~$ scala -version
Scala code runner version 2.7.5final -- (c) 2002-2008 LAMP/EPFL
ben@ben-m4000t:~$ scala
Welcome to Scala version 2.7.5final (OpenJDK 64-Bit Server VM, Java 1.6.0_0).
Type in expressions to have them evaluated.
Type :help for more information.
scala> :quit
ben@ben-m4000t:~$

可以看出,安装的版本是 2.7.5,离最新版本 2.7.7 也不远了。Ubuntn 会定期更新其提供的软件。相信不久以后 Ubuntu 系统中的 Scala 软件包就会升级到更新的版本。

 

从上图可以看出,Ubuntu 还提供了一些有关线性代数(Linear Algebra)等方面的 Scalable 包。

Ubuntu 提供的 Scala 软件包并不包含 sbaz 工具。这是由于 Ubuntu 使用自己 apt 工具进行软件包管理,所以会禁用其他的软件包管理工具。比如说,象 Firefox 等软件的“检查更新”菜单项在 Ubuntu 系统也是被禁用或取消了的。

 

Ubuntu 系统中 Scala 的库文件放在 /usr/share/java 目录下,如下图所示:

 

而 Scala 编译器和解释程序放在 /usr/bin 目录下,如下图所示:

 

可以看出,在 Ubuntu 操作系统中,Scala 软件的各个文件是分散在操作系统的各处的,而不是集中在如同一个如同 /opt/scala-2.7 之类的目录下。这是 Debian 类型的 Linux 的设计哲学。这种设计哲学与各种软件包各自集中存放的设计哲学各有长处和短处吧,如果要展开讨论,又是一场口水战了。:)

当然,在 Ubuntu 操作系统中也可以不使用 apt-get 命令,而是自己去 Scala 官方网站下载最新 Scala 2.7.7 的 Linux 安装包,自己安装,这样就会集中安装在一起了,而且也可以有 sbaz 工具了。当然,这时候就要你自己负责 Scala 软件包的升级更新了,Ubuntu 操作系统可不会帮你升级更新不使用 apt-get 命令安装的软件包的。

 

由于没有 sbaz 工具,我们需要自己找来 mscorlib.dll、predef.dll 和 scalaruntime.dll 这三个文件,然后放到 /usr/local/lib/scala-net 目录下,如下所示:

ben@ben-m4000t:~$ sudo mkdir /usr/local/lib/scala-net
ben@ben-m4000t:~$ sudo mv mscorlib.dll predef.dll scalaruntime.dll /usr/local/lib/scala-net

 

然后再编写一个如下所示的 scalac-net 文件放到 /usr/local/bin 目录下:

 

这样,就准备好了 Scala 的 .NET 环境,可以开始干活了。

首先,编辑一个如下图所示的 dotnet.scala 源程序:

 

然后,按以下步骤编译和运行这个程序:

ben@ben-m4000t:~/work/scala$ scalac-net dotnet.scala
ben@ben-m4000t:~/work/scala$ ilasm dotnet.msil
Assembling 'dotnet.msil' , no listing file, to exe --> 'dotnet.exe'
Operation completed successfully
ben@ben-m4000t:~/work/scala$ mono dotnet.exe
       Scala.NET: 欢迎光临
      OS Version: Unix 2.6.31.16
     CLR Version: 2.0.50727.1433
Default Encoding: System.Text.UTF8Encoding
ben@ben-m4000t:~/work/scala$

注意,在运行 dotnet.exe 之前,必须把 /usr/local/lib/scala-net/predef.dll 文件拷贝到当前目录下。

可以看出,Scala.NET 的 CLR 版本已经是 2.0.50727.1433 了。

 

我们来看看这台机上有哪些 mscorlib.dll 文件:

ben@ben-m4000t:~$ ls -l /opt/mono-2.6/lib/mono/*/mscorlib.dll /usr/lib/mono/*/mscorlib.dll /usr/local/lib/scala-net/mscorlib.dll
-rwxr-xr-x 1 root root 2092544 2009-12-18 10:01 /opt/mono-2.6/lib/mono/1.0/mscorlib.dll
-rwxr-xr-x 1 root root 2586624 2009-12-18 10:02 /opt/mono-2.6/lib/mono/2.0/mscorlib.dll
-rw-r--r-- 1 root root 2076672 2009-09-23 23:28 /usr/lib/mono/1.0/mscorlib.dll
-rw-r--r-- 1 root root 2565632 2009-09-23 23:29 /usr/lib/mono/2.0/mscorlib.dll
-rw-r--r-- 1 ben  ben  2070528 2009-12-22 10:35 /usr/local/lib/scala-net/mscorlib.dll
ben@ben-m4000t:~$

在 /opt/mono-2.6/lib/mono 目录下的是 Mono 2.6.1 版本的,请参见:在 Ubuntu 9.10 操作系统中安装 mono 2.6

在 /usr/lib/mono 目录下的是 Ubuntu 9.10 操作系统自带的 Mono 2.4.2.3 版本的。

在 /usr/local/lib/scala-net 目录下的是 Scala.NET 的。

这五个 mscorlib.dll 文件的大小各不相同,看来是不同版本的。

至于这些 mscorlib.dll 文件的版本各是多少,以及 Scala.NET 的进一步话题,留待下一篇文章继续。

posted on 2009-12-22 16:51 银河 阅读(...) 评论(...) 编辑 收藏