-
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!
-
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!
-
Hello, CASL World!
Posted on 1月 5th, 2012 by cx20
CASL
CASL は情報処理技術者試験の為に仕様策定されたアセンブリ言語である。仮想計算機 COMET 上で動作する。
2001年より仕様改訂され現在は COMMET II / CASL II が利用されている。ソースコード
コンパイル&実行方法(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!
-
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!
-
Hello, NASM World!
Posted on 1月 3rd, 2012 by cx20
NASM
NASM はフリーのアセンブリ言語である。名前の由来は Netwide Assembler より。
構文の特徴としては AT&T 記法ではなく Intel 記法が使われているという特徴がある。
ソースコード(64bit版)
section .text global _main extern _puts _main: push rbp mov rbp, rsp push rbx mov rbx, rsp and spl, 0xF0 mov rdi, msg call _puts mov rsp, rbx pop rbx mov rsp, rbp pop rbp ret section .data msg db "Hello, NASM World!", 0
コンパイル&リンク方法
$ nasm -f macho64 hello.asm $ gcc -o hello hello.o
実行結果
Hello, NASM World!
-
Hello, GAS World!
Posted on 1月 2nd, 2012 by cx20
GAS
GAS は GNU プロジェクトで使用されるアセンブリ言語である。Linux カーネルの開発にも用いられている。
構文の特徴としては Intel 記法ではなく、AT&T 記法が使われているという特徴がある。
ソースコード(32bit版)
.text .globl _main _main: pushl %ebp movl %esp, %ebp andl $-16, %esp subl $16, %esp call ___main movl $_msg, (%esp) call _puts movl $0, %eax leave ret .data _msg: .asciz "Hello, GAS World!"
ソースコード(64bit版)
.text .globl _main _main: pushq %rbp movq %rsp, %rbp leaq _msg(%rip), %rdi callq _puts xorl %eax, %eax popq %rbp ret .data _msg: .asciz "Hello, GAS World!"
上記コードは以下のC言語のソースを GCC でアセンブリコード出力(gcc -S hello.c)したものに相当する。
#include <stdio.h> int main( int argc, char* argv[] ) { printf( "Hello, GAS World!n" ); return 0; }
コンパイル&リンク方法(32bit版)
$ gcc -c hello.s -m32 $ gcc -o hello hello.o
コンパイル&リンク方法(64bit版)
$ gcc -c hello.s -m64 $ gcc -o hello hello.o
実行結果
Hello, GAS World!
-
Hello, LLVM Assembler World!
Posted on 1月 1st, 2012 by cx20
LLVM
LLVM Assembly Language は LLVM で使用されている中間言語である。LLVM は Low Level Virtual Machine の略で、言語に独立な仮想マシンである。
位置づけとしては Java VM のクラスファイルや、.NET Framework に対する MSIL(中間言語)に相当する。
ソースコード(Mac 版)
target triple = "x86_64-apple-macosx10.7.2" @str = internal constant [19 x i8] c"Hello, LLVM World!0" define i32 @main(i32 %argc, i8** nocapture %argv) nounwind uwtable ssp { %puts = tail call i32 @puts(i8* getelementptr inbounds ([19 x i8]* @str, i64 0, i64 0)) ret i32 0 } declare i32 @puts(i8* nocapture) nounwind
ソースコード(MinGW 版)
; ModuleID = 'hello.c' target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-f80:128:128-v64:64:64-v128:128:128-a0:0:64-f80:32:32-n8:16:32-S32" target triple = "i686-w64-mingw32" @str = private unnamed_addr constant [19 x i8] c"Hello, LLVM World!0" define i32 @main(i32 %argc, i8** nocapture %argv) nounwind { %puts = tail call i32 @puts(i8* getelementptr inbounds ([19 x i8]* @str, i32 0, i32 0)) ret i32 0 } declare i32 @puts(i8* nocapture) nounwind
上記コードは以下のC言語のソースを Clang でアセンブリコード出力(clang -S -O4 hello.c)したものに相当する。
#include <stdio.h> int main( int argc, char* argv[] ) { printf( "Hello, LLVM World!¥n" ); return 0; }
コンパイル(LLVM Clang コンパイラ)
$ clang -o hello hello.ll
実行結果
Hello, LLVM World!
-
Hello, New Year!
Posted on 1月 1st, 2012 by cx20
あけましておめでとうございます。
本年もよろしくお願いします。 -
Hello, MSIL World!
Posted on 12月 31st, 2011 by cx20
MSIL
MSIL は .NET Framework で使用されている中間言語(Intermediate Language)である。
ソースコード
.assembly extern mscorlib {} .assembly hello {} .method static void Main() cil managed { .entrypoint ldstr "Hello, MSIL World!" call void [mscorlib]System.Console::WriteLine(string) ret }
上記コードは以下の C# のソースに対応する。
アセンブリファイル(.NET でコンパイルしたモジュール)を ildasm で逆アセンブル(ildasdm hello.exe /out:hello.il)することで MSIL のコードを得られる。using System; class Hello { static void Main( String[] args ) { Console.WriteLine( "Hello, MSIL World!" ); } }
コンパイル&実行方法(Mono)
$ ilasm hello.il $ mono hello.exe
コンパイル&実行方法(.NET Framework)
C:¥> ilasm hello.il C:¥> hello
実行結果
Hello, MSIL World!
-
Hello, Ada World!
Posted on 12月 30th, 2011 by cx20
Ada
Ada は米国国防総省の音頭で開発が進められたプログラミング言語である。名前の由来は世界初のプログラマと言われる Ada さんから。
構文は Pascal に似ており、また、Oracle の PL/SQL は Ada の影響を受けていると言われている。
ソースコード
with Ada.Text_Io; use Ada.Text_Io; procedure Hello is begin Put_Line ("Hello, Ada World!"); end Hello;
コンパイル方法(GNAT)
$ gnatmake hello.adb
実行結果
Hello, Ada World!