Список «Hello, world!» на разных языках (стянуто с луркморе)

May 03, 2009 23:45

BASIC:

10 PRINT "Hello, World!"

Или даже вот так в Quick/Turbo BASIC:

? "Hello, World!"

Почти не отличается в Ruby:

puts 'Hello, World!'

Похожим образом в Python:

print "Hello, World!"

А вот в Python 3.0 (aka Py3k, Пузик) - немного по-другому:

print("Hello, World!")

Так - в Pascal:

program HelloWorld;
begin
WriteLn('Hello, World!');
end.

Так - в Lotus Script:

Messagebox "Hello, World!", MB_OK

Или так (не самый заметный вариант):

PRINT "Hello, World!"

Так - в C:

#include

int main()
{
printf("Hello, World!\n");
return 0;
}

Так - в C++:

#include

int main(void)
{
std::cout<<"Hello, World!" return 0;
}

С ООП:

#include

class Hello
{
public:
void World()
{
std::cout << "Hello, world!" << std::endl;
}
};

int main(void)
{
Hello().World();
return 0;
}

С шаблонами:

class World{};

template
void Hello(T hello)
{
std::cout << "Hello, " << hello << std::endl;
}

template
void Hello()
{
std::cout << "Hello, world!" << std::endl;
}

int main(void)
{
Hello();
return 0;
}

Чудеса КЗ грамматики:

template
class Hello
{
public:
Hello(T hello)
{
std::cout << "Hello, " << hello << std::endl;
}
};

template <>
class Hello
{
public:
Hello()
{
std::cout << "Hello, world!" << std::endl;
}
};

int main(void)
{
Hello();
return 0;
}

C#

class Program
{
static void Main()
{
System.Console.WriteLine("Hello, World!");
}
}

А так будет в Perl:

#!/usr/bin/perl
print "Hello, World!\n";

Так - в весьма простом и довольно красивом, но малопопулярном языке Haskell (обратите внимание на прекрасную читаемость и простоту кода):

import qualified Data.ByteString as BS
import System.IO
message :: [[Char]]
message = [ 'H':'e':'l':'l':'o':',':[]
, 'w':'o':'r':'l':'d':'!':[] ]
putHelloWorld :: [Char] -> IO()
putHelloWorld (x:xs) =
Prelude.putChar(x) >> putHelloWorld xs
putHelloWorld [] = Prelude.putChar('\n')
main :: IO ()
main =
hSetBuffering stdout NoBuffering >> hSetBuffering stdin LineBuffering >> putHelloWorld(message')
where
message' = let f = (++) . (++ " ")
f' = foldl1 f
in f' message

Чуть менее полный матана вариант кода на Haskell:

main = print "Hello, world!"

На Лиспе вообще-то будет так:

(eval (cons (quote mapcar)
(cons (cons (quote function)
(cons (quote princ) ()))
(cons (cons (quote quote)
(cons (cons #\H (cons #\e (cons #\l (cons #\l (cons #\o
(cons #\, (cons #\Space
(cons #\w (cons #\o (cons #\r (cons #\l (cons #\d (cons #\!
()))))))))))))) ())) ()))))

Но можно и так:

(mapcar #'princ '(#\H #\e #\l #\l #\o #\, #\Space #\w #\o #\r #\l #\d #\!))

Или так:

(princ "Hello, world!")

Или даже так (в REPL):

"Hello, world!"

Нечитаемый вариант на языке BrainFuck:

++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.

На самодостаточном FORTH:

: HELLO 72 EMIT 101 EMIT 2 0 DO 108 EMIT LOOP 111 EMIT ;
: WORLD 119 EMIT 111 EMIT 114 EMIT 108 EMIT 100 EMIT ;
: HELLO_WORLD HELLO 44 EMIT SPACE WORLD 33 EMIT ;
HELLO_WORLD

Тот же FORTH без выебоновЪ:

: HelloWorld ." Hello, world!" ;

Встроенный язык 1С:Предприятие:

Сообщить("Привет, Мир!");

Кофеиновый код на языке Java:

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

А вот так на Eiffel:

class HELLO_WORLD
feature
print_hello is
-- Print "Hello, World!"
do
print ("Hello, World!")
end
end

На MIDlet Pascal:

Program Hello;
Begin
DrawText('Hello, world!', 5, 5);
Repaint; Delay(5000);
End.

ПэХэПэ:

echo "Hello, world!"; ?>

Или так:

="Hello, world!"?>

а на ЖабаСкрипт будет вот так:

document.write("Hello, world!");

Или вот так на Action script 3.0 (флэшовая реализация стандарта ECMAScript):

trace('Hello World!')

//Или, если непременно надо вывести прямо на экран, а не в консоль, так:
var tf:TextField = new TextField
tf.text = "Hello World!"
addChild(tf)

Delphi:

{$APPTYPE CONSOLE}
begin
ShowMessage('Hello, world!');
end.

На баше:

echo 'Hello, world!'

На Прологе:

goal :-
write ("Hello, World!").

SQL-92:

SELECT 'Hello, World!'

Oracle SQL:

SELECT 'Hello, World!' FROM dual;

Microsoft SQL Server:

PRINT 'Hello, world';

MySQL:

SELECT 'Hello, World!';

Обычно хеллоуворлдщика можно ввести в транс, добавив в какой-нибудь частоиспользуемый header-файл следующие строчки (ахтунг, C-specific!):

#ifndef DEFINE_ME
#error Fatal error! There must be some brain in your head!
#endif

Очевидно, что никакой сложности в решении такая задача из себя не представляет. Тем не менее, решив подобную задачу на каком-либо языке программирования, субъект чаще всего начинает oшибочно самоидентифицироваться с программистом.

Однако на языках ассемблера данная задача представляется более сложной:

Assembler i8086, MS-DOS, tasm:

.model tiny
.code
org 100h

Start:
mov ah, 9
mov dx, offset msg
int 21h

mov ax, 4C00H
int 21h

msg db 'Hello, world$'
end Start

Assembler i386, Linux, nasm

SECTION .data
msg: db "Hello, world",10
len: equ $-msg

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

mov ebx, 0
mov eax, 1
int 0x80

То же, только GAS:

.data
msg: .ascii "Hello,world!\n"
len = . - msg

.text
.globl _start
_start:
movl $4,%eax
movl $1,%ebx
movl $msg,%ecx
movl $len,%edx
int $0x80

xorl %ebx,%ebx
movl $1,%eax
int $0x80

Assembler i386, Windows, masm:

.386
.model flat, stdcall
option casemap:none
include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
includelib \masm32\lib\kernel32.lib

.data
msg db "Hello, world!", 13, 10
len equ $-msg

.data?
written dd ?

.code
start:
push -11
call GetStdHandle

push 0
push offset written
push len
push offset msg
push eax
call WriteFile

push 0
call ExitProcess
end start

Или так:

.386
.model flat, STDCALL
includelib kernel32.lib
GetStdHandle PROTO:DWORD
WriteConsoleA PROTO:DWORD,:DWORD,:DWORD,:DWORD,:DWORD
ExitProcess PROTO:DWORD
.const
message db "Hello, world!"
.code
Main PROC
LOCAL hStdOut :DWORD
push -11
call GetStdHandle
mov hStdOut,EAX
push 0
push 0
push 16d
push offset message
push hStdOut
call WriteConsoleA
push 0
call ExitProcess
Main ENDP
End Main

Assembler микроконтроллер ATMega16, AVR Studio:

.include "m16def.inc"
.cseg
.org $0000
rjmp start ;Reset handler
.org $0030
start:
ldi r24, 25 ; ~= 9600 @ 4Mhz clock
out UBRRL, r24
out UBRRH, r2
ldi r24, 1 << TXEN
out UCSRB, r24
ldi r24, 1 << URSEL | 1 << UCSZ0 | 1 << UCSZ1 ; 8-n-1
out UCSRC, r24

; send msg
ldi ZL, msg << 1
loop:
lpm r0, Z+ ; next char
tst r0 ; terminated?
stop: breq stop

while_busy:
sbis UCSRA, UDRE
rjmp while_busy
out UDR, r0
rjmp loop
msg: .db "Hello, world!", 13, 10, 0

На двух семи-сегментных индикаторах и FPGA VHDL, САПР Quartus:

LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.NUMERIC_STD.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY CTL IS
PORT(
CLK: IN STD_LOGIC;
DOUT1: OUT STD_LOGIC_VECTOR(0 TO 6);
DOUT2: OUT STD_LOGIC_VECTOR(0 TO 6)
);
END ENTITY;

ARCHITECTURE CTL_ARCH OF CTL IS
SIGNAL CNT: STD_LOGIC_VECTOR(0 TO 3):="0000";

BEGIN
PROCESS(CLK)
BEGIN
IF (CLK'EVENT AND CLK='1') THEN
IF CNT = "1011" THEN CNT <= "0000";
END IF;
CASE CNT IS
WHEN "0000" => DOUT1 <= "1001000"; DOUT2 <="1111111";--H
WHEN "0001" => DOUT1 <= "0110001"; DOUT2 <="1111111";--E
WHEN "0010" => DOUT1 <= "1110001"; DOUT2 <="1111111";--L
WHEN "0011" => DOUT1 <= "1110001"; DOUT2 <="1111111";--L
WHEN "0100" => DOUT1 <= "0000001"; DOUT2 <="1111111";--O
WHEN "0101" => DOUT1 <= "1111111"; DOUT2 <="1111111";--
WHEN "0110" => DOUT1 <= "1100001"; DOUT2 <="1000001"; --W(1) W(2)
WHEN "0111" => DOUT1 <= "0000001"; DOUT2 <="1111111";--O
WHEN "1000" => DOUT1 <= "0011000"; DOUT2 <="1111111";--R
WHEN "1001" => DOUT1 <= "1110001"; DOUT2 <="1111111";--L
WHEN "1010" => DOUT1 <= "0000001"; DOUT2 <="1111111";--D
WHEN OTHERS => DOUT1 <= "1111111"; DOUT2 <="1111111";
END CASE;
CNT<= CNT+1;
END IF;
END PROCESS;
END CTL_ARCH;

На HQ9+

H [2]

На мелкомягком быдлоподелии (C++ с использованием Component Object Model):

[
uuid(2573F8F4-CFEE-101A-9A9F-00AA00342820)
]
library LHello
{
importlib("actimp.tlb");
importlib("actexp.tlb");
#include "pshlo.idl"
[
uuid(2573F8F5-CFEE-101A-9A9F-00AA00342820)
]
cotype THello
{
interface IHello;
interface IPersistFile;
};
};
[
exe,
uuid(2573F890-CFEE-101A-9A9F-00AA00342820)
]
module CHelloLib
{
importheader();
importheader();
importheader();
importheader("pshlo.h");
importheader("shlo.hxx");
importheader("mycls.hxx");
importlib("actimp.tlb");
importlib("actexp.tlb");
importlib("thlo.tlb");
[
uuid(2573F891-CFEE-101A-9A9F-00AA00342820),
aggregatable
]
coclass CHello
{
cotype THello;
};
};

#include "ipfix.hxx"
extern HANDLE hEvent;
class CHello : public CHelloBase
{
public:
IPFIX(CLSID_CHello);
CHello(IUnknown *pUnk);
~CHello();
HRESULT __stdcall PrintSz(LPWSTR pwszString);
private:
static int cObjRef;
};
#include "thlo.h"
#include "pshlo.h"
#include "shlo.hxx"
#include "mycls.hxx"
int CHello:cObjRef = 0;
CHello::CHello(IUnknown *pUnk) : CHelloBase(pUnk)
{
cObjRef++;
return;
}
HRESULT __stdcall CHello::PrintSz(LPWSTR pwszString)
{
printf("%ws\n", pwszString);
return(ResultFromScode(S_OK));
}
CHello::~CHello(void)
{
cObjRef--;
if( cObjRef == 0 )
PulseEvent(hEvent);
return;
}
#include "pshlo.h"
#include "shlo.hxx"
#include "mycls.hxx"
HANDLE hEvent;
int _cdecl main(int argc, char * argv[]) {
ULONG ulRef;
DWORD dwRegistration;
CHelloCF *pCF = new CHelloCF();
hEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
CoInitiali, NULL);
CoInitializeEx(NULL, COINIT_MULTITHREADED);
CoRegisterClassObject(CLSID_CHello, pCF, CLSCTX_LOCAL_SERVER,
REGCLS_MULTIPLEUSE, &dwRegistration);
WaitForSingleObject(hEvent, INFINITE);
CoRevokeClassObject(dwRegistration);
ulRef = pCF->Release();
CoUninitialize();
return(0);
}
extern CLSID CLSID_CHello;
extern UUID LIBID_CHelloLib;
CLSID CLSID_CHello = { 0x2573F891, 0xCFEE, 0x101A, { 0x9A, 0x9F, 0x00, 0xAA, 0x00, 0x34, 0x28, 0x20 } };
UUID LIBID_CHelloLib = { 0x2573F890, 0xCFEE, 0x101A, { 0x9A, 0x9F, 0x00, 0xAA, 0x00, 0x34, 0x28, 0x20 } };
#include "pshlo.h"
#include "shlo.hxx"
#include "clsid.h"
int _cdecl main( int argc, char * argv[]) {
HRESULT hRslt;
IHello *pHello;
ULONG ulCnt;
IMoniker * pmk;
WCHAR wcsT[_MAX_PATH];
WCHAR wcsPath[2 * _MAX_PATH];
wcsPath[0] = '\0';
wcsT[0] = '\0';
if( argc 1) {
mbstowcs(wcsPath, argv[1], strlen(argv[1]) + 1);
wcsupr(wcsPath);
}
else {
fprintf(stderr, "Object path must be specified\n");
return(1);
}
if(argc 2)
mbstowcs(wcsT, argv[2], strlen(argv[2]) + 1);
else
wcscpy(wcsT, L"Hello World");
printf("Linking to object %ws\n", wcsPath);
printf("Text String %ws\n", wcsT);
hRslt = CoInitializeEx(NULL, COINIT_MULTITHREADED);
if(SUCCEEDED(hRslt)) {
hRslt = CreateFileMoniker(wcsPath, &pmk);
if(SUCCEEDED(hRslt))
hRslt = BindMoniker(pmk, 0, IID_IHello, (void **)&pHello);
if(SUCCEEDED(hRslt)) {
pHello->PrintSz(wcsT);
Sleep(2000);
ulCnt = pHello->Release();
}
else
printf("Failure to connect, status: %lx", hRslt);
CoUninitialize();
}
return(0);
}
Previous post Next post
Up