Archive for the ‘Java VM’ Category

  1. Hello, Quercus World!

    Posted on 5月 1st, 2013 by cx20

    Quercus

    Quercus は Java による PHP 実装である。
    PHP の構文が使える他、Java のライブラリが使用できる。

    ソースコード

    <?php
    echo "Hello, Quercus World!\n";
    ?>

    ソースコード(Java ライブラリを使用した場合)

    <?php
    import java.lang.System;
    System::out->println( "Hello, Quercus World!" );
    ?>

    実行方法

    C:¥> java -cp resin.jar com.caucho.quercus.CliQuercus hello.php

    実行結果

    Hello, Quercus World!
  2. Hello, Fantom World!

    Posted on 1月 27th, 2012 by cx20

    Fantom

    Fantom は Java VM もしくは .NET 共通言語ランタイム上で動作するオブジェクト指向言語である。構文は Java や C# に似ている。
    言語の名前は当初、作者が住んでいる住所にちなんで「Fan」と付けられたが、検索しやすいように「Fantom」に変更された。

    ソースコード

    #!/usr/bin/env fan
    class Hello
    {
        static Void main()
        {
            echo("Hello, Fantom World!")
        }
    }

    実行方法(スクリプトファイルを指定して実行)

    $ fan hello.fan

    実行方法(実行権限を付与して実行)

    $ chmod +x hello.fan
    $ ./hello.fan

    実行方法(Java VM で実行)

    $ fan -version --Druntime=java
    Fantom Launcher
    Copyright (c) 2006-2011, Brian Frank and Andy Frank
    Licensed under the Academic Free License version 3.0
     
    Java Runtime:
      java.version:    1.6.0_29
      java.vm.name:    Java HotSpot(TM) 64-Bit Server VM
      java.vm.vendor:  Apple Inc.
      java.vm.version: 20.4-b02-402
      java.home:       /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
      fan.platform:    macosx-x86_64
      fan.version:     1.0.61
      fan.env:         sys::BootEnv
      fan.home:        /usr/local/Cellar/fantom/1.0.61/libexec
     
    $ fan --Druntime=java hello.fan

    実行方法(.NET Framework で実行)

    C:¥> fan -version --Druntime=dotnet
    Fantom Launcher
    Copyright (c) 2006-2011, Brian Frank and Andy Frank
    Licensed under the Academic Free License version 3.0
     
    .NET Runtime:
      clr.version:  2.0.50727.5448
      sys.platform: win32-x86
      sys.version:  1.0.61
     
    C:¥> fan --Druntime=dotnet hello.fan

    実行結果

    Hello, Fantom World!
  3. Hello, Oxygene World!

    Posted on 1月 24th, 2012 by cx20

    Oxygene

    Oxygene は RemObjects Software 社による .NET または Java 環境向けのプログラミング言語である。
    Embarcadero 社の Delphi Prism のプログラミング言語として採用されている。
    コンパイラ単体は「Command Line Compiler」として無償提供されている。
    C# 同様に、UNIX 環境向けの .NET Framework 互換プロジェクト「Mono」により他の OS でも動作させることができる。

    ソースコード(.NET ライブラリを使用した場合)

    namespace hello;
     
    interface
     
    type
        Hello = class
    public
        class method Main(args: array of String): Integer;
    end;
     
    implementation
     
    class method Hello.Main(args: array of String): Integer;
    begin
        System.Console.WriteLine('Hello, Oxygene World!');
    end;
     
    end.

    ソースコード(Java ライブラリを使用した場合)

    namespace hello;
     
    interface
     
    type
        Hello = class
    public
        class method Main(args: array of String): Integer;
    end;
     
    implementation
     
    class method Hello.Main(args: array of String): Integer;
    begin
        System.out.println('Hello, Oxygene World!');
    end;
     
    end.

    コンパイル&実行方法(.NET プログラムとしてコンパイル&実行)

    C:¥> oxygene HelloDotNet.pas -type:exe -mode:Net
    C:¥> HelloDotNet

    コンパイル&実行方法(Java プログラムとしてコンパイル&実行)

    C:¥> oxygene HelloJava.pas -mode:Java
    C:¥> java -jar hellojava.jar

    実行結果

    Hello, Oxygene World!
  4. Hello, Java VM Assembler World!

    Posted on 1月 6th, 2012 by cx20

    Java VM Assembler

    Java VM アセンブラは Java VM の中間コード(バイトコード)を生成するアセンブラである。
    主要な Java VM アセンブラとしては、Jasmin 等がある。

    ソースコード

    .class public Hello
    .super java/lang/Object
     
    .method public ()V
       aload_0
       invokespecial java/lang/Object/()V
       return
    .end method
     
    .method public static main([Ljava/lang/String;)V
       .limit stack 2
       getstatic java/lang/System/out Ljava/io/PrintStream;
       ldc "Hello, Java VM World!"
       invokevirtual java/io/PrintStream/println(Ljava/lang/String;)V
       return
    .end method

    上記コードは以下の Java のソースに対応する。
    クラスファイルを tinapoc と言った逆アセンブラや javap で逆アセンブル(javap -c Hello)することでアセンブリコードを得られる。

    public class Hello {
        public static void main( String[] args ) {
            System.out.println( "Hello, Java VM World!" );
        }
    }

    コンパイル&実行方法(Jasmin)

    $ java -jar jasmin.jar Hello.j
    $ java Hello

    実行結果

    Hello, Java VM World!