也谈在 .NET 平台上使用 Scala 语言(续)

而我是在 Ubuntu 操作系统中使用 Scala.NET 的,应该没有这个问题。

那么,就让我们来测试一下吧。

现在,我们增加一个 DotNet.cs 文件,如下所示:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

using System;

using System.IO;

using System.Web;

using System.Collections.Generic;

namespace Skyiv

{

  public class DotNet

  {

    public static string UrlEncode(string s)

    {

      return HttpUtility.UrlEncode(s);

    }

    public static decimal ToDecimal(double d)

    {

      decimal dec;

      try

      {

        dec
= (
decimal)d;

      }

      catch (OverflowException)

      {

        dec
=
decimal.MinValue;

      }

      return dec;

    }

    

    public static FileMode[]
GetFileModes()

    {

      return (FileMode[])Enum.GetValues(typeof(FileMode));

    }

    

    /*

    public
static List<FileMode> GetFileModeList()

    {

      var
list = new List<FileMode>();

      foreach
(FileMode item in Enum.GetValues(typeof(FileMode))) list.Add(item);

      return
list;

    }

    */

  }

}

然后,在 dotnetscala 中增加对这些 C# 方法的调用:


1

2

3

4

5

6

7

8

9

10

11

12

13

import System.Console

object dotnet
extends Application
{

  Console.WriteLine("      
Scala.NET: 欢迎光临"
);

  Console.WriteLine("     
OS Version: "
 +
Environment.OSVersion);

  Console.WriteLine("    
CLR Version: {0}  ( {1} )"
,
Environment.Version, Skyiv.RuntimeFramework.CurrentFramework);

  Console.WriteLine("Default
Encoding: "
 +
System.Text.Encoding.Default);

  Console.WriteLine(Skyiv.DotNet.UrlEncode("欢迎使用
scala-msil!"
));

  Console.WriteLine(Skyiv.DotNet.ToDecimal(System.Math.PI));

  Console.WriteLine("{0:N0}",
Skyiv.DotNet.ToDecimal(System.Double.MaxValue));

  Console.WriteLine(Skyiv.DotNet.GetFileModes());

  //Console.WriteLine(Skyiv.TheXmlTree.GetValue());

}

最后,对 makefile 文件进行相应改动:

现在来看看编译和运行的情况吧:

[email protected]:~/Projects/ScalaNet$ make
csc -out:RuntimeFramework.dll -t:library RuntimeFramework.cs
csc -out:DotNet.dll -t:library -r:System.Web.dll DotNet.cs
csc -out:TheXmlTree.dll -t:library -r:System.Xml.Linq.dll TheXmlTree.cs
scalac-net -Xassem-path RuntimeFramework.dll:DotNet.dll:TheXmlTree.dll dotnet.scala
ilasm dotnet.msil
Assembling ‘dotnet.msil‘ , no listing file, to exe --> ‘dotnet.exe‘
Operation completed successfully
[email protected]:~/Projects/ScalaNet$ mono dotnet.exe
       Scala.NET: 欢迎光临
      OS Version: Unix 2.6.31.16
     CLR Version: 2.0.50727.1433  ( Mono 2.4.2.3 )
Default Encoding: System.Text.UTF8Encoding
%e6%ac%a2%e8%bf%8e%e4%bd%bf%e7%94%a8+scala-msil!
3.14159265358979
-79,228,162,514,264,337,593,543,950,335
System.IO.FileMode[]
[email protected]:~/Projects/ScalaNet$ 

很好,一切正常。可见,Scala 语言和 C# 语言的各种类型的参数传递没有问题。

但是,如果把 DotNet.cs 程序中被注释掉的 GetFileModeList 方法释放出来,再编译:

[email protected]:~/Projects/ScalaNet$ make
csc -out:DotNet.dll -t:library DotNet.cs
scalac-net -Xassem-path RuntimeFramework.dll:DotNet.dll:TheXmlTree.dll dotnet.scala
[email protected](00 00 15 12 25 01 11 11)
error: error while loading DotNet, type ‘Skyiv.DotNet‘ is broken
...

出错了!原因是 GetFileModeList 方法返回一个泛型集合,而泛型是 CLR 2.0 才有的功能。

上篇文章中,我们知道,scala-msil 软件包是基于 Mono 1.9.1.0 .ver 1:0:5000:0 开发的,不支持 CLR 2.0 的功能。

看来,只好等待该软件包的作者把他们的开发环境升级到 Mono 2.x 版本了。但愿他们早日发布新的 scala-msil 软件包。 :)

我还试图从源代码开始编译 Scala SDK 。

按照 Subversion Repositiory Access | The Scala Programming Languge 网页上的指示,按以下步骤进行:

[email protected]:~$ sudo apt-get install ant
[email protected]:~$ cd src
[email protected]:~/src$ svn co http://lampsvn.epfl.ch/svn-repos/scala/scala/trunk scala
[email protected]:~/src$ cd scala
[email protected]:~/src/scala$ ant
[email protected]:~/src/scala$ ln -s build/quick/bin bin
[email protected]:~/src/scala$ bin/scala -version
Scala code runner version 2.8.0.r0-b20091224094007 -- Copyright 2002-2010, LAMP/EPFL
[email protected]:~/src/scala$ bin/scala
Welcome to Scala version 2.8.0.r0-b20091224094007 (OpenJDK 64-Bit Server VM, Java 1.6.0_0).
Type in expressions to have them evaluated.
Type :help for more information.
scala> :quit
[email protected]:~/src/scala$

经过漫长的等待,终于编译完成了。如上所示,版本是 2.8.0r0。

但是,在源代码包里我没有找到 sbaz 以及 scala-msil 的源代码。

所以,我想把 scala-msil 源代码重新编译为适合 CLR 2.0 的想法破产了。 :(

版权声明:本文为博主http://www.zuiniusn.com原创文章,未经博主允许不得转载。

时间: 2024-08-04 21:41:37

也谈在 .NET 平台上使用 Scala 语言(续)的相关文章

也谈在 .NET 平台上使用 Scala 语言(中)

说我在单位的安装 Ubuntu 9.10 操作系统 Lenovo ThinkCentre M4000t 台式机上写完"也谈在 .NET 平台上使用 Scala 语言(上)"之后不久,就下班回家了.于是,我就在家里的安装 Windows Vista 操作系统的 Dell Inspiron 1520 本本上继续工作.首先就是启动 Sun Virtualbox 打开一个 Ubuntu 9.10 操作系统.而这个 Ubuntu 9.10 操作系统中尚未安装 Scala SDK 软件包.正好,我

也谈在 .NET 平台上使用 Scala 语言(上)

前几天.老赵发表了两篇文章:在.NET平台上使用Scala语言(上):初尝 和 在.NET平台上使用Scala语言(下):分析. 我拜读了以后,对 Scala 语言也感兴趣.于是就開始了尝试. 在 Ubuntu 9.10 操作系统上安装 Scala SDK 是很easy的一件事: [email protected]:~$ sudo apt-get install scala [email protected]:~$ scalac -version Scala compiler version 2

龙芯GO!龙芯平台上构建Go语言环境指南

龙芯软件生态系列——龙芯GO!龙芯平台上构建Go语言环境指南2016-07-05 龙芯中科1初识Go语言Go语言是Google公司于2009年正式推出的一款开源的编程语言,是由Robert Griesemer.KenThompson和Rob Pike等世界顶尖计算科学家精心打造的系统编程语言.Go语言最显著的特点是编码简洁迅速.支持高效并发和自动内存管理等.此外,Go语言还面向网络服务器.存储系统和数据库等领域的编程进行了优化设计,并且简化了应用系统的安装和部署.因此,Go语言受到了广大程序员的

如何在Java平台上使用脚本语言做Java开发

如何在Java平台上使用脚本语言做Java开发     最近开始流行区分Java平台和Java语言,但很多Java开发者还是不能确定如何在 Java应用程序开发中结合脚本.本篇文章,Gregor Roth给出了在Java平台上使用脚本的方法.通过这篇文章,你可以了解怎样在你的Java应用程序中使用脚本,是否你要通过使用Groovy和 Jython把不同的Java应用程序模块粘合在一起,或者写一个你自己的基于JRuby的应用程序,适用于Java平台. 作为一个Java开发者,你可能已经注意到了,J

天方夜谈_PHP是世界上最好的语言

因为一无所知,接到学校建设网站的项目,特意学起了建设网站的知识,H5技术基本可以实现网页布局,稍加动感.接着学世界上最好的语言--PHP. 看到这个梗https://www.zhihu.com/question/26498147,在知乎上已经笑喷!低级趣味的一个翻译:PHP--看黄片?本来学JSP的,因为之前有一定的Java基础,上手快.但是我就没明白我们项目老师叫:去学PHP--(哈哈)世界上最好的语言. 当然了每一种语言的基础知识都是大同小异,比如:变量(PHP中还有几个supergloba

在云平台上基于Go语言+Google图表API提供二维码生成应用

二维码能够说已经深深的融入了我们的生活其中.到处可见它的身影:但通常我们都是去扫二维码, 曾经我们分享给朋友一个网址直接把Url发过去,如今我们能够把自己的信息生成二维码再分享给他人. 这里就分享一下基于Go语言+Google图表API提供二维码生成功能的小应用,并演示怎样把它公布到云平台上, 让每一个人都能够通过网络訪问使用它. Google图表API Google在http://chart.apis.google.com 上提供了一个将表单数据自己主动转换为图表的服务. 只是,该服务非常难交

Go语言在国产CPU平台上应用前景的探索与思考

http://www.chinaaet.com/article/3000087559 0 引言 CPU是电子产品的核心,代表着信息产业的发展水平.CPU发展至今已经有四十多年的历史了,实际就是Intel公司的发展历史[1].Intel的CPU和其兼容产品占领了PC的大半江山.我国CPU战略已经发展十余年,部分领域完全具有核心技术,产业化取得积极进展,但是与国际主流厂商Intel等仍存在较大差距.国产CPU由于受多方因素制约,单核性能并不高,在2000年左右所有的微处理器厂商都转向了多核微处理器的

11月第3周业务风控关注 | 下月起互联网平台上线群聊、直播等功能前需安全评估

易盾业务风控周报每周呈报值得关注的安全技术和事件,包括但不限于内容安全.移动安全.业务安全和网络安全,帮助企业提高警惕,规避这些似小实大.影响业务健康发展的安全风险. 本周内容安全事件比较集中,故以内容安全特刊形式展现给大家. 1.下月起互联网平台上线群聊.直播等功能前需安全评估 今后,互联网平台新增论坛.微博.公众账号.短视频.直播等功能前需进行安全评估.国家互联网信息办公室今日(11月15日)在官网公布<具有舆论属性或社会动员能力的互联网信息服务安全评估规定>,提出互联网信息服务提供者在上

[Python 学习] 二、在Linux平台上使用Python

这一节,主要介绍在Linux平台上如何使用Python 1. Python安装. 现在大部分的发行版本都是自带Python的,所以可以不用安装.如果要安装的话,可以使用对应的系统安装指令. Fedora系统:先以root登入,运行 yum install python Ubuntu系统:在root组的用户, 运行 sudo apt-get install python 2. 使用的Python的脚本 Linux是一个以文件为单位的系统,那么我们使用的Python是哪一个文件呢? 这个可以通过指令