Electronic Joint Business

Solution for E-Business

jvm

Scala 指南

一种可伸缩语言

Scala 是一种函数对象混合的语言,具有一些强大的优点:

首先,Scala 可编译为 Java 字节码,这意味着它在 JVM 上运行。除了允许继续利用丰富的 Java 开源生态系统之外,Scala 还可以集成到现有的 IT 环境中,无需进行迁移。
其次,Scala 基于 Haskell 和 ML 的函数原则,大量借鉴了 Java 程序员钟爱的面向对象概念。因此,它可以将两个领域的优势混合在一起,从而提供了显著的优点,而且不会失去我们一直依赖的熟悉的技术。
最后,Scala 由 Martin Odersky 开发,他可能是 Java 社区中研究 Pizza 和 GJ 语言的最著名的人,GJ 是 Java 5 泛型的工作原型。而且,它给人一种 “严肃” 的感觉;该语言并不是一时兴起而创建的,它也不会以同样的方式被抛弃。
Scala 的名称表明,它还是一种高度可伸缩 的语言。我将在本系列的后续文章中介绍有关这一特性的更多信息。

下载并安装 Scala

可以从 Scala 主页 下载 Scala 包。截止到撰写本文时,最新的发行版是 2.6.1-final。它可以在 Java 安装程序版本 RPM 和 Debian 软件包 gzip/bz2/zip 包中获得,可以简单地将其解压到目标目录中,而且可以使用源码 tarball 从头创建。(Debian 用户可以使用 “apt-get install” 直接从 Debian 网站上获得 2.5.0-1 版。2.6 版本具有一些细微的差异,所以建议直接从 Scala 网站下载和安装。)

>>> 阅读全文

 

, , , , ,

Scala语言编程指南 (一)

文章评分:

Scala设计初衷
Java 语言已经是有一定年头的语言了,随着 C#,Ruby 等新的语言的出现,Java 的语法显得臃肿且平庸,和这些新兴语言相比,其开发效率并不十分突出。程序开发者想要一种更精炼和更灵活的语言去提高他们的生产效率。这也是如今所谓的 Ruby, Python 这样的脚本(Script)语言大行其道的原因之一。

当 Java 开始老朽不堪的时候,其虚拟机(JVM)的性能却得到大众的认可,JVM 的性能优化做得较为到位,因此许多程序开发者相信使用基于 JVM 的新语言是正确的前进道路。为此 Sun 雇佣了 JRuby 和 Jython (Ruby 和 Python 在 JVM 上的实现)的主要开发者。而 Scala 的出现对于 Java 开发者来说提供了一门更加新式的语言。

值得一提的是 Scala 开始为针对 JVM 设计的,但是随着 Scala 的发展,它也可以运行在 .NET 的 CLR 虚拟机上。当我们讨论有关 Scala 语法时,它们大致也能应用于 .NET 之上。

Scala 简介
Scala 是一种多范式的语言,因为 Scala 既支持面向对象编程,也支持函数式编程。它在拥有简洁,优雅,灵活的语法的同时,也提供了一个久经考验的静态类型系统和惯用语法,所以从小巧的解释性脚本到大型的复杂系统它都可以胜任。无独有偶,Microsoft 资助的大学项目 Nemerle 也走了同一条道路。

>>> 阅读全文

 

, , , , ,

手工打造JVM

本文所介绍虚拟机被应用到一个真正的项目中:墨菲斯 – Silverlight 1.1的原型。在本文的附件中的演示讲解了虚拟机是如何工作,你也可以阅读附件中的源代码。不过注意,这儿的实现和任何既有的商业实现都不尽相同。为了节约时间,只要JVM规格书没有详细说明的,我们就采用最简单的方式加以实现。

JVM的各个部分

类文件结构
这个JVM首先就需要个能将各个Java类组合起来的应用,所以谈任何类之前,首先就得定义一个结构“JavaClassFileFormat.”

struct  JavaClassFileFormat
     {
         u4 magic;
         u2 minor_version;
         u2 major_version;
         u2 constant_pool_count;
         cp_info **constant_pool; //[constant_pool_count-1];
         u2 access_flags;
         u2 this_class;
         u2 super_class;
         u2 interfaces_count;
         u2* interfaces; //[interfaces_count];
         u2 fields_count;
         field_info_ex *fields; //[fields_count];
         u2 methods_count;
         method_info_ex* methods; //[methods_count];
         u2 attributes_count;
         attribute_info** attributes; //[attributes_count];
     };

我们看到标有注释的地方,还定义了一些其他的结构,他们用来表示类文件的常量池(类文件中使用的常量)、字段、方法和属性,这儿我们先列出其定义,稍后再详细解释。

struct cp_info
     {
         u1 tag;
         u1* info;
     };
 
     struct field_info
     {
         u2 access_flags;
         u2 name_index;
         u2 descriptor_index;
         u2 attributes_count;
         attribute_info* attributes; //[attributes_count];
     };
     
     struct method_info
     {
         u2 access_flags;
         u2 name_index;
         u2 descriptor_index;
         u2 attributes_count;
         attribute_info* attributes; //[attributes_count];
     };
     
     struct attribute_info
     {
         u2 attribute_name_index;
         u4 attribute_length;
         u1* info;//[attribute_length];
     };

现在要做的是把类文件按字节读到内存中,再用JavaClass对象解析这些原始字节,逐一确定字段、方法、异常表等等。JavaClass类表示一个类在内存中的结构化形式。它有一个指针,指向所加载的类文件的原始字节流。

>>> 阅读全文

 

, ,