论坛首页 Java企业应用论坛

Hello,Noop

浏览 1786 次
锁定老帖子 主题:Hello,Noop
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-09-20  

Noop 是一门新的程序设计语言,更准确的说,它是一个实验,准备把一些优秀的工程实践集成到语言中,比如依赖注入、测试、代码可读性等等。不过,Noop实在太新了,新到很多东西还没有成型,也不要指望现在就用它来做些什么。但是,翻看一下Noop,还是发现一些有趣的东西。

Noop采用构建系统是Buildr , 你可以把它理解成Ant或是Maven。Buildr是Apache的第一个Ruby项目,当然,它主要还是为Java系统服务。对很多项目而言,构建脚 本会随着系统的发展逐渐增大,里面逐渐也会出现很多逻辑,换句话说,构建脚本也是程序。这个理念的实践者,对于Ruby项目,自然就是Rake ,而C/C++项目,可以选择SCons , 现在Java项目有了Buildr。Buildr内置的许多task,在项目不复杂的情况下,只要遵循约定,简单几行代码就可以把构建过程实现出来,充分 体现了“易者易为,难者可为”的理念。它甚至还支持生成Eclipse和IntelliJ IDEA的工程文件,省去了自己手工配置的烦恼。

Noop的主要开发语言是Scala。Scala近来的名头越来越响,Java之父James Gosling把它选做Java之外的第一选择Twitter用Scala改写了一些后端服务Groovy的创造者James Strachan甚至认为如果Scala早点可用,他就不会去写Groovy 。在编译器方面,Scala支持Parser Combinator,为人们提供了从零开始手工编写和用工具(像ANTLR和yacc)编写解析器之外的又一种选择。不过,Noop里面并没有运用Scala的这个方面能力,它用了ANTLR ,这也让我们有机会见识Scala的另一优秀之处,在Java类里直接使用Scala类。

具体看一下Noop。打开src/main,里面有三个目录:

  • antlr,ANTLR的语法文件
  • noop,用noop实现的标准库
  • scala,Noop语言的实现

再来看看语言实现,scala/noop目录有几个包:

  • grammer,调用ANTLR生成的类实现的解析器
  • interpreter,实现了一个基本的解析器
  • model,语言的基本模型
  • types,一些基本类型,可以理解为Noop的运行时。

从现有的目录和代码,我们可以看到Noop还是非常简单的,它甚至不包含生成JVM字节码的部份,而且类型也是最基本的几个。

最后,让我们实际运行一段Noop程序,在此之前,你需要安装Mercurial(也就是hg)和Buildr,对于Ubuntu而言:
    sudo apt-get install hg
    sudo env JAVA_HOME=$JAVA_HOME gem install buildr

获得Noop的代码
    hg clone https://noop.googlecode.com/hg/ noop

clone成功之后,进入到noop目录,构建整个noop
    buildr

如果是第一次运行,可能它会用一段时间下载所需JAR文件,然后,才会执行编译,运行测试等任务。

打包的命令是这样的:
    buildr package

有了生成的JAR包,我们可以运行Noop程序了,这里我们用了Noop提供了一个HelloWorld的例子程序,它位于examples/noop/helloworld/HelloWorld.noop。
    java -jar target/noop-0.1.0-SNAPSHOT.jar HelloWorld examples/noop/helloworld src/main/noop/stdlib

还是那句话,Noop实在太新了,包括目前的命令行都是那么粗糙,它甚至不能加载自己的标准库,需要指定对应的路径。

 

Noop刚刚起步,对于希望了解语言实现的人,它可以当作一个起步的阶梯。

   发表时间:2009-09-20  
这玩意暂时只能说是玩具中的玩具,如果不是google的名头,估计没人会注意到。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics