Archive for 1月, 2012

  1. Hello, Lua World!

    Posted on 1月 13th, 2012 by cx20

    Lua

    Lua は軽量で速さに定評のあるスクリプト言語である。名前はポルトガル語で月を意味する。
    構文は Pascal に似ており、他のスクリプト言語(Python や Ruby 等)よりも高速に動作するという特徴を持つ。
    C言語の組み込み言語として設計されており、ゲーム開発におけるイベントスクリプトやヤマハのルータの組み込み言語等にも利用されている。また、最近、iPhone SDK の利用規約が少し緩くなったことにより、iPhone アプリの開発に利用されるケースも増えている。

    ソースコード

    #!/usr/local/bin/lua
    print "Hello, Lua World!"

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

    $ lua hello.lua

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

    $ chmod +x hello.lua
    $ ./hello.lua

    コンパイル&実行方法(バイトコードにコンパイルして実行)

    $ luac -o hello.luac hello.lua
    $ lua hello.luac

    実行結果

    Hello, Lua World!
  2. Hello, OCaml World!

    Posted on 1月 12th, 2012 by cx20

    OCaml

    OCaml は関数型言語 ML の方言の一つである。フランスの国立INRIA研究所で開発された。名前の由来は Objective Caml より。
    スクリプトとして動作する他、コンパイルすることも可能である。コンパイルされたネイティブコードは実行速度が速いことで定評がある。

    ソースコード

    #!/usr/bin/ocaml
    print_string "Hello, OCaml World!n";;

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

    $ ocaml hello.ml

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

    $ chmod +x hello.ml
    $ ./hello.ml

    コンパイル&実行方法(バイトコードにコンパイルして実行)

    $ ocamlc -o hello hello.ml
    $ ocamlrun hello

    コンパイル&実行方法(ネイティブコードにコンパイルして実行)

    $ ocamlopt -o hello hello.ml
    $ ./hello

    実行結果

    Hello, OCaml World!
  3. Hello, Scheme World!

    Posted on 1月 11th, 2012 by cx20

    Scheme

    Scheme は Lisp の方言の一つ。名前の由来は「策略家(schemer)」から。多くの言語仕様を取り入れた Common Lisp に対して、Scheme は必要最小限の言語仕様となっている。
    Scheme の実装は多数存在するが主なものとして、Gauche、GNU Guile、MIT Scheme などがある。
    以下のコードは、Gauche 及びに対話シェル gosh によるサンプルである。
    Gaucheはフランス語で「ねじれた、左」の意味。

    ソースコード

    #!/usr/local/bin/gosh
    (print "Hello, Scheme World!")

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

    $ gosh hello.scm

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

    $ chmod +x hello.scm
    $ ./hello.scm

    実行結果

    Hello, Scheme World!
  4. Hello, Clojure World!

    Posted on 1月 10th, 2012 by cx20

    Clojure

    Clojure は Lisp の方言の一つ。Java VM 上で動作する。名前の由来は Closure + java から。
    Lisp の構文が使える他、Java のライブラリが利用できる。

    ソースコード

    #!/usr/bin/env clj
    (println "Hello, Clojure World!")

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

    #!/usr/bin/env clj
    (.println java.lang.System/out "Hello, Clojure World!")

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

    $ clj hello.clj

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

    $ chmod +x ./hello.clj
    $ ./hello.clj

    実行結果

    Hello, Clojure World!
  5. Hello, Jython World!

    Posted on 1月 9th, 2012 by cx20

    Jython

    Jython はオブジェクト指向スクリプト言語 Python の Java 実装である。Jim Hugunin 氏によって開発された。
    Python の構文が使える他、Java のライブラリが利用できる。
    なお、Python の .NET 実装である IronPython を開発したのも Jim Hugunin 氏である。

    ソースコード

    #!/usr/bin/env jython
    print "Hello, Jython World!"

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

    #!/usr/bin/env jython
    from java.lang import System
    System.out.println("Hello, Jython World!")

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

    $ jython hello.py

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

    $ chmod +x hello.py
    $ ./hello.py

    実行結果

    Hello, Jython World!
  6. Hello, JRuby World!

    Posted on 1月 8th, 2012 by cx20

    JRuby

    JRuby はオブジェクト指向スクリプト言語 Ruby の Java 実装である。
    Ruby の構文が使える他、Java のライブラリが利用できる。
    また、JRuby のスクリプトは Java クラスとしてコンパイルすることもできえる。

    ソースコード

    #!/usr/bin/env jruby
    puts "Hello, JRuby World!"

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

    #!/usr/bin/env jruby
    require 'java'
    import 'java.lang.System'
    System.out.println('Hello, JRuby World!')

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

    $ jruby hello.rb

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

    $ chmod +x hello.rb
    $ ./hello.rb

    コンパイル&実行方法(バイトコードにコンパイルして実行)

    $ jrubyc hello.rb
    $ jruby hello.class

    コンパイル&実行方法(Java クラスとして実行)

    $ jrubyc hello.rb
    $ java -cp $JRUBY_HOME/lib/jruby.jar:. hello

    実行結果

    Hello, JRuby World!
  7. Hello, Scala World!

    Posted on 1月 7th, 2012 by cx20

    Scala

    Scala はオブジェクト指向言語と関数型言語の特徴を組み合わせた比較的新しいプログラミング言語である。Java VM 上で動作する。Java の後継を担うものとしても注目を浴びている。
    並行プロセス処理が優れているということで Twitter のメッセージ基盤(API の実装)にも採用されている。
    なお、Java VM で動作するスクリプト言語としては、他にも、Groovy、JRuby、Jython、Clojure 等がある。

    ソースコード

    object Hello {
        def main(args: Array[String]) {
            println("Hello, Scala World!")
        }
    }

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

    $ scala Hello.scala

    コンパイル&実行方法(バイトコードにコンパイルして実行)

    $ scalac Hello.scala
    $ scala Hello

    コンパイル&実行方法(Java クラスとして実行)

    $ scalac Hello.scala
    $ java -cp $SCALA_HOME/lib/scala-library.jar:. Hello

    実行結果

    Hello, Scala World!
  8. 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!
  9. Hello, CASL World!

    Posted on 1月 5th, 2012 by cx20

    CASL

    CASL は情報処理技術者試験の為に仕様策定されたアセンブリ言語である。仮想計算機 COMET 上で動作する。
    2001年より仕様改訂され現在は COMMET II / CASL II が利用されている。

    ソースコード

    MAIN    START
            OUT     MSG,LEN
            RET
    MSG     DC      'Hello, CASL World!'
    LEN     DC      18
            END

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

    $ casl2 -Ohello.o hello.cas
    $ comet2 hello.o
    

    コンパイル&実行(JPA CASL II シミュレータ)

    $ java -jar casl2.jar hello.cas
    $ java -jar run.jar hello.obj
    

    実行結果

    Hello, CASL World!
    
  10. Hello, MASM World!

    Posted on 1月 4th, 2012 by cx20

    MASM

    MASM はマイクロソフト社製のアセンブリ言語である。正式名称は Microsoft Macro Assembler。Visual C++ に付属している。

    ソースコード(32bit版)

    .MODEL flat
    EXTRN   _printf:PROC
     
    _DATA   SEGMENT
    msg     DB      'Hello, MASM World!', 0aH, 00H
    _DATA   ENDS
     
    _TEXT   SEGMENT
    _main   PROC
            push    OFFSET msg
            call    _printf
            add     esp, 4
            xor     eax, eax
            ret     0
    _main   ENDP
    _TEXT   ENDS
    END

    ソースコード(64bit版)

    EXTRN   printf:PROC
     
    _DATA   SEGMENT
    msg     DB      'Hello, MASM World!', 0aH, 00H
    _DATA   ENDS
     
    _TEXT   SEGMENT
    main    PROC
            sub     rsp, 40
            lea     rcx, OFFSET msg
            call    printf
            xor     rax, rax
            add     rsp, 40
            ret     0
    main    ENDP
    _TEXT   ENDS
    END

    上記コードは以下のC言語のソースを VC++ でアセンブリコード出力(cl /FA hello.c)したものに相当する。

    #include <stdio.h>
     
    int main( int argc, char* argv[] )
    {
        printf( "Hello, MASM World!n" );
        return 0;
    }

    コンパイル&リンク方法(MASM 32bit版)

    C:¥> ml -c hello.asm
    C:¥> link hello.obj libcmt.lib

    コンパイル&リンク方法(MASM 64bit版)

    C:¥> ml64 -c hello64.asm
    C:¥> link hello64.obj libcmt.lib

    実行結果

    Hello, MASM World!