challenge Hello, world!

「Hello, world!」と表示するプログラムを作ってください。

Posted feedbacks - Other

HQ9+で
1
H

うろ覚えのMindで書いてみた。
1
2
3
※ お題:「Hello, world!」と表示するプログラムを作ってください。 
メインとは
  「Hello, world!」を 表示すること。

Rexx
1
say "Hello, world!"

「『言語』欄にアセンブラないの?」
って書きたかったんですっ。

VS 2005使用。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
	.586
	.model flat

extrn   _printf:near
public	_main

	.data
msg db "Hello, World", 0

	.code
_main	proc near
        push ebp
        mov  ebp, esp
	mov  eax, offset msg
	push eax
	call _printf
	pop eax
	mov esp, ebp
        pop ebp
        ret 0
_main	endp
	end

debug < hello.txtでどーぞ(WinXP)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
a 100
MOV	DX,0108
MOV	AH,09
INT	21
RET
DB "Hello, world!$"

R CX
16
N HE.COM
W
Q

WSH(Windows Script Host)のVBScript版です。拡張子はvbsで、cscriptとwscriptどちらからでも起動可能です。
1
WScript.Echo("Hello, World!")

同じくJScript版です。VBScriptとは微妙に違います…
1
WScript.Echo("Hello, World!");

たいていの言語で動く。 前後にコンパイラや実行環境依存のごみが表示されるけど気にしない方が幸せ。
1
Hello, world!

N88-BASIC 懐かしい。。。
1
10 PRINT "Hello, World!"

まあ、、、こんな簡単なプログラムで、ミスを。。。恥かしい。。。
1
2
3
C234567
      WRITE(*,*) 'Hello, World!'
      END

以外と忘れられてますね。VBA。
1
2
3
Sub HelloWorld()
    MsgBox "Hello, World!"
End Sub

あると思ったけど無かった。 Linux, 32bitで hello world OS依存しまくりw
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
section .data
msg	db 'hello, world', 0Ah
len	equ	$-msg

section .text
global  _start
_start: mov	edx, len
	mov	ecx, msg
	mov	ebx, 1
	mov	eax, 4
	int	0x80

	mov	ebx, 0
	mov	eax, 1
	int	0x80

!抜かしてた
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
section .data
msg	db 'hello, world!', 0Ah
len	equ	$-msg

section .text
global  _start
_start: mov	edx, len
	mov	ecx, msg
	mov	ebx, 1
	mov	eax, 4
	int	0x80

	mov	ebx, 0
	mov	eax, 1
	int	0x80

win verです nasmコンパイラ 32bit(16bitでも動くはずだけど) x86cpu 

レジスタのみで処理は完結
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
mov ah, 02

mov dl, 48h
int 21h
mov dl, 65h
int 21h
mov dl, 6Ch
int 21h
mov dl, 6Ch
int 21h
mov dl, 6Fh
int 21h
mov dl, 2Ch
int 21h
mov dl, 77h
int 21h
mov dl, 6Fh
int 21h
mov dl, 72h
int 21h
mov dl, 6Ch
int 21h
mov dl, 64h
int 21h
mov dl, 21h
int 21h

mov ah, 4ch
mov al, 0
int 21h

OCamlはあるのにStandardMLは無い。。。
1
print ("Hello, world!")

Unlambdaです
1
`````````````.H.e.l.l.o.,. o.w.o.r.l.d.!v

まだ出ていないようなので。
1
2
3
4
5
with ada.text_io;
procedure HelloWorld is
begin
 ada.text_io.put_line("Hello, world!");
end HelloWorld;


	
1
echo 'Hello, world!'

コンピュータプログラミングの概念・技法・モデルで利用されている言語Ozです。

コードは参考ページそのままです。

id:mizp さんに感謝します。

1
2
3
4
5
6
7
8
functor
import
   Application
   System
define
   {System.show 'Hello,world!!'}
   {Application.exit 0}
end

POV-Rayで。
どこまで省略できるか、どんどん消してみた。
1
2
background {1}
text {ttf "crystal.ttf","Hello, world!",0,0 translate <-3.3,0,6>}

uwscというのはwindowsのマウス操作の記録・再生ツールと思っていたら、
マニュアルを見るとまるきり言語ですね。

ところで、"Hello, world!"って、誰が誰に向かって言ってるんでしょうか。
プログラムの発する「うぶ声」ということなんでしょうかね。
1
msgbox("Hello, world!")

Mac OS X (PowerPC) 付属の as で。 適当なファイルに保存して、次のコマンドでコンパイルします。

% as -o hello.o hello.s
% ld -o hello hello.o
% ./hello
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
        .machine ppc
        .globl _main

_main:
        lis     r4, ha16(msg)
        addi    r4, r4, lo16(msg)
        li      r3, 1           ; stdout                                          
        lis     r5, ha16(msg_len)
        addi    r5, r5, lo16(msg_len)
        li      r0, 4           ; sys_write                                       
        sc                      ; system call                                     

        li      r3, 0
        li      r0, 1           ; sys_exit                                        
        sc

        .data
        .align  2

msg:
        .asciz  "Hello, world!\n"
        msg_len = . - msg - 1

Lisp 1.5です。文字の扱いがいまいち不確かなのですが、
上の命令は、指定した文をプリンタに出力します。
システムには大文字しか存在しないので全部大文字になります。
PRINTの代わりにPUNCHを使うとパンチカードに出力できるようです。
1
PRINT($$/HELLO, WORLD!/)

げんてー?

1
2
3
4
func hello <main>
{
   print( "Hello, World!" )
}

Factor です。

1
USE: io "Hello, world!" write

Forthでの初投稿。

1
." Hello, World!"

屁理屈のようだけれど、“Hello World!”と書いたテキスト・ファイルを用意しておいて、“test.txt”とでも名前をつけておく。 chmod +x test.txt とやって、実行すればいい。

1
2
3
#! gawk

{ print }

アセンブラで、コマンドプロンプト(cmd.exe)から起動する場合はこうなりますか。 NASMとALINKで実行ファイル作って確認しました。 オブジェクトファイル名はmain.objとして、ALINKの"-subsys con"オプションでリンクします。 その他のオプションは通常のwin32アプリ作成と同じにしました。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
extern ExitProcess
extern GetStdHandle
extern WriteConsoleA
section .text
global main
main:
        push -11d             
        Call GetStdHandle     
        push 0x0              
        push wtnChars         
        push dword [outsize]  
        push outstring        
        push eax              
        call WriteConsoleA    
        call ExitProcess      
        ret
section .data
outstring: db "Hello, World!"
outsize:   dd $-outstring
wtnChars: dd 0x0

64bit Linux で NASM によるアセンブラです。 64bit ではシステムコールは int 0x80 ではなく syscall を使います。システムコール番号も違い、システムコールで使うレジスタも次の順番になります。

  1. rdi
  2. rsi
  3. rdx
  4. rcx
  5. r8
  6. r9
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
;;; nasm -f elf64 hello.asm && ld -o hello hello.o && ./hello
        bits 64
section .text
global _start
_start:
        mov rax, 1
        mov rdi, 1
        mov rsi, msg
        mov rdx, len
        syscall

        mov rax, 60
        xor rdi, rdi
        syscall

section .data
        msg     db      'Hello, world!'
        len     equ     $ - msg

1
2
3
4
5
6
7
8
MODULE HelloWorld;

IMPORT InOut;

BEGIN
    InOut.WriteString("Hello World!");
    InOut.WriteLn
END HelloWorld.

Arcのようにprnもあるようですが、printlnで
1
(println "Hello, World!")

マニュアルに載っている例そのままですが。

1
2
3
4
5
6
7
8
9
declare i32 @puts(i8 *)

@msg = internal constant [13 x i8] c"Hello, world!"

define i32 @main() {
    %cast = getelementptr [13 x i8]* @msg, i32 0, i32 0
    call i32 @puts(i8 * %cast)
    ret i32 0
}

文字列定数の最後に0をつけるべきでした。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
--- a/hello.s   Sat Sep 20 02:38:09 2008 +0900
+++ b/hello.s   Sat Sep 20 14:05:19 2008 +0900
@@ -1,9 +1,9 @@ declare i32 @puts(i8 *)
 declare i32 @puts(i8 *)
 
-@msg = internal constant [13 x i8] c"Hello, world!"
+@msg = internal constant [14 x i8] c"Hello, world!\00"
 
 define i32 @main() {
-    %cast = getelementptr [13 x i8]* @msg, i32 0, i32 0
+    %cast = getelementptr [14 x i8]* @msg, i32 0, i32 0
     call i32 @puts(i8 * %cast)
     ret i32 0
 }

limboはじめました。
まずはエディタではまる。

コードは公式のドキュメントほぼそのまま。
d2.bとして保存、
limbo d2.b
でビルド。
d2
で実行。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
implement d2;

include "sys.m";
include "draw.m";

d2: module
{
    init: fn(ctxt: ref Draw->Context, argv: list of string);
};

init (ctxt: ref Draw->Context, argv: list of string)
{
    sys: Sys;
    sys = load Sys Sys->PATH;
    sys->print("Hello, World!\n");
}

Index

Feed

Other

Link

Pathtraq

loading...