תוכנית Hello world
מתוך ויקיפדיה, האנציקלופדיה החופשית
תוכנית "hello world" היא תוכנית מחשב אשר פשוט מדפיסה את המחרוזת "hello world" בהתקן תצוגה. משתמשים בה בהדגמות ללימוד שפות תכנות ותלמידים רבים משתמשים בה כנסיון התכנות הראשון שלהם בשפה.
לרוב כתיבת תוכנית כזו היא עניין פשוט מאד, במיוחד בשפות המתבססות על שורת פקודה (למשל בShell) בכדי להוציא את הפלט. אומנם יש שפות שבהן זהו עניין מסובך, במיוחד אם יש צורך בממשק משתמש גרפי (GUI).
תוכנית "hello world" יכולה להיות שימושית כדי לבדוק שהמהדר, סביבת הפיתוח וסביבת הריצה של השפה הותקנו כראוי. הגדרת כלי התכנות מאפס עד למצב שבו תוכנות פשוטות יכולות להתהדר ולרוץ, יכולה לדרוש עבודה רבה. לכן יש טעם גם בשימוש בתוכנה פשוטה בכדי לבדוק מערכת כלי תכנות חדשה.
בזמן שתוכנות בדיקה קטנות היו קיימות מאז תחילת התפתחות התכנות, מסורת השימוש ב"hello world" כהודעת הבדיקה הושפעה מתוכנית דוגמה שהופיע בספר "The C Programming Language" , של בריאן קרניגהן ודניס ריצ'י. תוכנית הדוגמה מהספר מדפיסה "hello, world"
(כלומר, ללא אות רישית וללא סימן קריאה בסוף המחרוזת. אלה הוכנסו למסורת מאוחר יותר).
יש הסוברים שאוסף תוכניות "hello world" הכתובות בשפות תכנות שונות יכול לשרת כ"אבן הרוזטה" בכדי לעזור בהבנת והשוואת שפות. אין בכך כל ממש. תוכניות "hello world" מדגימות בעיקר את פקודת ההדפסה, שהיא פקודה בעלת חשיבות נמוכה ביותר בשפות תכנות.
בהשוואה בעלת ערך בין שפות תכנות יש להשוות את מבני הבקרה שלהן, את אוצר הפקודות שלהן ואת סוגי הנתונים שהן יודעות לטפל בהן. חרף זאת, המנהג הוא להציג תוכניות "hello world" בשפות שונות - לא נסטה ממנהג זה.
להלן דוגמאות לתוכניות כאלה במספר שפות
[עריכה] ממשק משתמש טקסטואלי (TUI) (כלומר במסוף, מונחה שורת פקודה)
[עריכה] ABC
WRITE "Hello World"
[עריכה] Ada
with Ada.Text_Io; use Ada.Text_Io; procedure Hello is begin Put_Line ("Hello, world!"); end Hello;
[עריכה] AmigaE
PROC main() WriteF('Hello, World!') ENDPROC
[עריכה] APL
'Hello World'
[עריכה] שפת סף
[עריכה] ארכיטקטורות בעלות אוגרים בלבד: שפת סף של DEC PDP-8, PAL-III
ראה את חלק הדוגמה במאמר על PDP-8.
[עריכה] צירוף מיקרומעבד ומערכת הפעלה המוצלח הראשון: שפת הסף של Intel 8080/Zilog Z80, CP/M, RMAC
bdos equ 0005H ; BDOS entry point start: mvi c,9 ; BDOS function: output string lxi d,msg$ ; address of msg call bdos ret ; return to CCP
msg$: db 'Hello, world!$' end start
[עריכה] מכונת אוגרים ומפתח אוגרים: שפת סף של MOS 6502, CBM KERNAL, ca65
MSG: .ASCIIZ "Hello, world!" LDX #0 LDA MSG,X ; load initial char @LP: JSR $FFD2 ; chrout INX LDA MSG,X BNE @LP RTS
[עריכה] מכונת אוגרים/מפתח מיקרו-מקודדת : Data General Nova, RDOS
ראה את הדוגמה במאמר על Nova.
[עריכה] מכונת אוגרים מורחבת: של אינטל x86, MS-DOS, TASM
MODEL SMALL IDEAL STACK 100H
DATASEG MSG DB 'Hello, world!$'
CODESEG MOV AX, @data MOV DS, AX MOV DX, OFFSET MSG MOV AH, 09H ; DOS: output ASCII$ string INT 21H MOV AX, 4C00H INT 21H END
[עריכה] מכונות רב תכליתיות בדויות: MIX, MIXAL
TERM EQU 19 console device no. (19 = typewriter) ORIG 1000 start address START OUT MSG(TERM) output data at address MSG HLT halt execution MSG ALF "HELLO" ALF " WORL" ALF "D " END START end of program
[עריכה] מכונות רב תכליתיות עם אוגרים - CISC: DEC PDP-11, RT-11, MACRO-11
.MCALL .REGDEF,.TTYOUT,.EXIT .REGDEF
HELLO: MOV #MSG,R1 MOVB (R1),R0 LOOP: .TTYOUT MOVB +(R1),R0 BNE LOOP .EXIT
MSG: .ASCIZ /HELLO, WORLD!/ .END HELLO
[עריכה] CISC על מערכות הפעלה עם עיבוד מרובב: DEC VAX, VMS, MACRO-32
.title hello
.psect data, wrt, noexe
chan: .blkw 1 iosb: .blkq 1 term: .ascid "SYS$OUTPUT" msg: .ascii "Hello, world!" len = . - msg
.psect code, nowrt, exe
.entry hello, ^m<>
; Establish a channel for terminal I/O $assign_s devnam=term, - chan=chan blbc r0, end
; Queue the I/O request $qiow_s chan=chan, - func=#io$_writevblk, - iosb=iosb, - p1=msg, - p2=#len
; Check the status and the IOSB status blbc r0, end movzwl iosb, r0 ; Return to operating system end: ret
.end hello
[עריכה] מעבד RISC: שפת סף מובנת של ARM, RISC OS, BBC BASIC
.program ADR R0,message SWI "OS_Write0" SWI "OS_Exit" .message DCS "Hello, world!" DCB 0 ALIGN
[עריכה] AWK
BEGIN { print "Hello, world!" }
[עריכה] BASIC
[עריכה] MS BASIC (מסורתי, לא מובנה)
10 PRINT "Hello, world!" 20 END
[עריכה] TI-BASIC
(על מחשבונים גרפיים של TI-89/TI-92.)
:HelloWorld() :Prgm :Disp "Hello, world!" :EndPrgm
[עריכה] StarOffice/OpenOffice Basic
sub main print "Hello, World" end sub
[עריכה] BASIC מובנה
print "Hello, world!" end
[עריכה] BCPL
GET "LIBHDR"
LET START () BE $( WRITES ("Hello, world!*N") $)
[עריכה] BLISS
%TITLE 'HELLO_WORLD' MODULE HELLO_WORLD (IDENT='V1.0', MAIN=HELLO_WORLD, ADDRESSING_MODE (EXTERNAL=GENERAL)) = BEGIN
LIBRARY 'SYS$LIBRARY:STARLET';
EXTERNAL ROUTINE LIB$PUT_OUTPUT;
GLOBAL ROUTINE HELLO_WORLD = BEGIN
LIB$PUT_OUTPUT(%ASCID %STRING('Hello World!')) END;
END ELUDOM
[עריכה] C
#include <stdio.h>
int main() { printf("Hello, world!\n"); return 0; }
[עריכה] C#
using System;
class HelloWorldApp { public static void Main() { Console.WriteLine("Hello, world!"); } }
[עריכה] C++
#include <iostream>
int main() { std::cout << "Hello, world!" << std::endl; }
[עריכה] Clean
module hello
Start :: String Start = "Hello, world"
[עריכה] CLIST
PROC 0 WRITE Hello, World!
[עריכה] COBOL
IDENTIFICATION DIVISION. PROGRAM-ID. HELLO-WORLD.
ENVIRONMENT DIVISION.
DATA DIVISION.
PROCEDURE DIVISION. DISPLAY "Hello, world!". STOP RUN.
[עריכה] Common Lisp
(format t "Hello world!~%")
[עריכה] D
int main() { printf("Hello, world!\n"); return 0; }
[עריכה] אצוות DCL
$ write sys$output "Hello, world!"
[עריכה] Eiffel
class HELLO_WORLD
creation make feature make is local io:BASIC_IO do !!io io.put_string("%N Hello, world!") end -- make end -- class HELLO_WORLD
[עריכה] Erlang
-module(hello). -export([hello_world/0]).
hello_world() -> io:fwrite("Hello, world!\n").
[עריכה] EUPHORIA
constant SCREEN = 1 puts(SCREEN, "Hello, world!")
[עריכה] Forte TOOL
begin TOOL HelloWorld;
includes Framework; HAS PROPERTY IsLibrary = FALSE;
forward Hello;
-- START CLASS DEFINITIONS
class Hello inherits from Framework.Object
has public method Init;
has property shared=(allow=off, override=on); transactional=(allow=off, override=on); monitored=(allow=off, override=on); distributed=(allow=off, override=on);
end class; -- END CLASS DEFINITIONS
-- START METHOD DEFINITIONS
------------------------------------------------------------ method Hello.Init begin super.Init();
task.Part.LogMgr.PutLine('HelloWorld!'); end method; -- END METHOD DEFINITIONS HAS PROPERTY CompatibilityLevel = 0; ProjectType = APPLICATION; Restricted = FALSE; MultiThreaded = TRUE; Internal = FALSE; LibraryName = 'hellowor'; StartingMethod = (class = Hello, method = Init);
end HelloWorld;
[עריכה] Forth
." Hello, world!" CR
[עריכה] FORTRAN
PROGRAM HELLO WRITE(*,10) 10 FORMAT('Hello, world!') STOP END
[עריכה] Frink
println["Hello, world!"]
[עריכה] Gambas
ראו גם את החלק הדן בממשק משתמש גרפי.
PUBLIC SUB Main() Print "Hello, world!" END
[עריכה] Game Maker
באירוע ה"שרטט" של אוביקט מסוים:
draw_text(x,y,"Hello World");
[עריכה] Haskell
module HelloWorld (main) where
main = putStr "Hello World\n"
[עריכה] HP-41 & HP-42S
(מחשבוני כף יד אלפאנומריים של Hewlett-Packard המבוססים על רישום פולני הפוך (RPN))
01 LBLTHELLO 02 THELLO, WORLD 03 PROMPT
[עריכה] Iptscrae
ON ENTER { "Hello, " "World!" & SAY }
[עריכה] Io
"Hello world!" print
או
write("Hello world!\n")
[עריכה] Java
ראו גם את החלק הדן בממשק משתמש גרפי.
public class Hello { public static void main(String[] args) { System.out.println("Hello, world!"); } }
[עריכה] לוגו (שפת תכנות)
print [hello world!]
או
pr [Hello World!]
בmswlogo בלבד:
messagebox [Hi] [Hello World]
[עריכה] Lua
print("Hello, world!")
[עריכה] Modula-2
MODULE Hello; FROM Terminal2 IMPORT WriteLn; WriteString;
BEGIN WriteString("Hello, world!"); WriteLn; END Hello;
[עריכה] אצוות MS-DOS
(עם המפרש התקני command.com)
@echo Hello, world!
[עריכה] MUF
: main me @ "Hello, world!" notify ;
[עריכה] OCaml
let _ = print_endline "Hello world!";;
[עריכה] OPL
ראו גם את החלק הדן בממשק משתמש גרפי.
PROC hello: PRINT "Hello, World" ENDP
[עריכה] OPS5
(object-class request ^action)
(startup (strategy MEA) (make request ^action hello) )
(rule hello (request ^action hello) --> (write |Hello World!| (crlf)) )
[עריכה] Pascal
program Hello; begin writeln('Hello, world!'); end.
[עריכה] Perl
print "Hello, world!\n";
[עריכה] PHP
<?php echo "Hello, world!"; ?>
[עריכה] Pike
#!/usr/local/bin/pike int main() { write("Hello, world!\n"); return 0; }
[עריכה] PL/I
Test: procedure options(main); declare My_String char(20) varying initialize('Hello, world!'); put skip list(My_String); end Test;
[עריכה] POP-11
'Hello world' =>
[עריכה] POV-Ray
#include "colors.inc" camera { location <3, 1, -10> look_at <3,0,0> } light_source { <500,500,-1000> White } text { ttf "timrom.ttf" "Hello world!" 1, 0 pigment { White } }
[עריכה] Prolog
write('Hello world'),nl.
[עריכה] Python
print "Hello, world!"
[עריכה] REXX, NetRexx, and Object REXX
say "Hello, world!"
או:
say 'Hello, world!'
[עריכה] RPL
ראו גם את החלק הדן בממשק משתמש גרפי.
(On Hewlett-Packard HP-28, HP-48 and HP-49 series graphing calculators.)
<< CLLCD "Hello, World!" 1 DISP 0 WAIT DROP >>
[עריכה] Ruby
puts "Hello, world!"
[עריכה] Sather
class HELLO_WORLD is main is #OUT+"Hello World\n"; end; end;
[עריכה] Scheme
(display "Hello, world!") (newline)
[עריכה] sed
(הערה: דורש לפחות שורה אחת של קלט)
sed -ne '1s/.*/Hello, world!/p'
[עריכה] Seed7
$ include "seed7_05.s7i"; const proc: main is func begin writeln("Hello, world!"); end func;
[עריכה] Self
'Hello, World!' print.
[עריכה] Smalltalk
Transcript show: 'Hello, world!'
[עריכה] SML
print "Hello, world!\n";
[עריכה] SNOBOL
OUTPUT = "Hello, world!" END
[עריכה] SQL
create table MESSAGE (TEXT char(15)); insert into MESSAGE (TEXT) values ('Hello, world!'); select TEXT from MESSAGE; drop table MESSAGE;
או (למשל דיאלקט Oracle)
select 'Hello, world' from dual;
או (למשל דיאלקט MySQL)
select 'Hello, world';
או, ביתר פשטות
print 'Hello, World.'
או (לדיאלקט KB-SQL)
select Null from DATA_DICTIONARY.SQL_QUERY FOOTER or HEADER or DETAIL or FINAL event write "Hello, World!"
[עריכה] STARLET
RACINE: HELLO_WORLD.
NOTIONS: HELLO_WORLD : ecrire("Hello, world!").
[עריכה] TACL
#OUTPUT Hello, world!
[עריכה] Tcl
puts "Hello, world!"
[עריכה] Turing
put "Hello, world!"
[עריכה] TSQL
Declare @Output varchar(16) Set @Output='Hello, world!' Select @Output
או בואריאציות שונות:
Select 'Hello, world!' Print 'Hello, world!'
[עריכה] UNIX-style shell
echo 'Hello, world!'
[עריכה] ממשק משתמש גרפי (GUI)
[עריכה] AppleScript
display dialog "Hello, world!"
[עריכה] Gambas
ראה את החלק הדן בממשק משתמש טקסטואלי.
PUBLIC SUB Main() Message.Info("Hello, world!") END
[עריכה] ערכת הכלים של GTK (בC++)
#include <iostream> #include <gtkmm/main.h> #include <gtkmm/button.h> #include <gtkmm/window.h> using namespace std;
class HelloWorld : public Gtk::Window { public: HelloWorld(); virtual ~HelloWorld(); protected: Gtk::Button m_button; virtual void on_button_clicked();
};
HelloWorld::HelloWorld() : m_button("Hello, world!") { set_border_width(10); m_button.signal_clicked().connect(SigC::slot(*this, &HelloWorld::on_button_clicked)); add(m_button); m_button.show(); }
HelloWorld::~HelloWorld() {}
void HelloWorld::on_button_clicked() { cout << "Hello, world!" << endl; }
int main (int argc, char *argv[]) { Gtk::Main kit(argc, argv); HelloWorld helloworld; Gtk::Main::run(helloworld); return 0; }
[עריכה] GTK 2.x (בEuphoria)
include gtk2/wrapper.e
Info(NULL,"Hello","Hello World!")
[עריכה] Java
See also TUI section.
import javax.swing.JOptionPane;
public class Hello { public static void main(String[] args) { JOptionPane.showMessageDialog(null, "Hello, world!"); System.exit(0); } }
[עריכה] Java applet
- יישומון Java עובד בצירוף עם קובצי HTML.
<HTML> <HEAD> <TITLE>Hello World</TITLE> </HEAD> <BODY>
HelloWorld Program says:
<APPLET CODE="HelloWorld.class" WIDTH=600 HEIGHT=100> </APPLET>
</BODY> </HTML>
import java.applet.*; import java.awt.*;
public class HelloWorld extends Applet { public void paint(Graphics g) { g.drawString("Hello, world!", 100, 50); } }
[עריכה] JavaScript (או: ECMAScript) וJScript
- JavaScript היא שפת תכנות תסריטים הנמצאת בשימוש בקובצי HTML. הקוד הבא יכול להיות משולב בכל קובץ כזה.
<script type="text/javascript"><!-- function helloWorld() { alert("Hello, world!"); } //--></script>
<a href="#" onclick="helloWorld()">Hello World Example</a>
- שיטה קלה יותר המשתמשת ברמיזות של JavaScript, על ידי קריאה לפונקציית alert. העתק והדבק את השורה הבאה בתוך תגי ה <BODY> .... </BODY>.
<a href="#" onclick="alert('Hello, world!')">Hello World Example</a>
- שיטה קלה עוד יותר הכוללת שימוש בתמיכה של הדפדפנים הנפוצים בפרוטוקול 'javascript' מדומה להרצת קוד שלו. הכנס את השורה הבאה ככתובת של אתר אינטרנט בדפדפן.
[עריכה] OPL
ראה את החלק הדן בממשק משתמש טקסטואלי.
(על פסיון סדרה 3 ועזרים דיגיטליים אישיים (PDA) אחרים.)
PROC guihello: ALERT("Hello, world!","","Exit") ENDP
[עריכה] Qt (בC++)
#include <qapplication.h> #include <qpushbutton.h> #include <qwidget.h> #include <iostream>
class HelloWorld : public QWidget { Q_OBJECT
public: HelloWorld(); virtual ~HelloWorld(); public slots: void handleButtonClicked(); QPushButton *mPushButton; };
HelloWorld::HelloWorld() : QWidget(), mPushButton(new QPushButton("Hello, World!", this)) { connect(mPushButton, SIGNAL(clicked()), this, SLOT(handleButtonClicked())); }
HelloWorld::~HelloWorld() {}
void HelloWorld::handleButtonClicked() { std::cout << "Hello, World!" << std::endl; }
int main(int argc, char *argv[]) { QApplication app(argc, argv); HelloWorld helloWorld; app.setMainWidget(&helloWorld); helloWorld.show(); return app.exec(); }
[עריכה] RPL
ראה את החלק הדן בממשק משתמש טקסטואלי.
(On Hewlett-Packard HP-48G and HP-49 series calculators.)
<< "Hello, World!" MSGBOX >>
[עריכה] Visual Basic כולל VBA
MsgBox "Hello world!"
[עריכה] Windows API (בC)
#include <windows.h>
LRESULT CALLBACK WindowProcedure(HWND, UINT, WPARAM, LPARAM);
char szClassName[] = "MainWnd"; HINSTANCE hInstance;
int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { HWND hwnd; MSG msg; WNDCLASSEX wincl;
hInstance = hInst; wincl.cbSize = sizeof(WNDCLASSEX); wincl.cbClsExtra = 0; wincl.cbWndExtra = 0; wincl.style = 0; wincl.hInstance = hInstance; wincl.lpszClassName = szClassName; wincl.lpszMenuName = NULL; //No menu wincl.lpfnWndProc = WindowProcedure; wincl.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1); //Color of the window wincl.hIcon = LoadIcon(NULL, IDI_APPLICATION); //EXE icon wincl.hIconSm = LoadIcon(NULL, IDI_APPLICATION); //Small program icon wincl.hCursor = LoadCursor(NULL, IDC_ARROW); //Cursor if (!RegisterClassEx(&wincl)) return 0;
hwnd = CreateWindowEx(0, //No extended window styles szClassName, //Class name "", //Window caption WS_OVERLAPPEDWINDOW & ~WS_MAXIMIZEBOX, CW_USEDEFAULT, CW_USEDEFAULT, //Let Windows decide the left and top positions of the window 120, 50, //Width and height of the window, NULL, NULL, hInstance, NULL);
//Make the window visible on the screen ShowWindow(hwnd, nCmdShow); //Run the message loop while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; }
LRESULT CALLBACK WindowProcedure(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { PAINTSTRUCT ps; HDC hdc; switch (message) { case WM_PAINT: hdc = BeginPaint(hwnd, &ps); TextOut(hdc, 15, 3, "Hello, world!", 13); EndPaint(hwnd, &ps); break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hwnd, message, wParam, lParam); } return 0; }
או בדרך קלה הרבה יותר :
#include <windows.h> int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { MessageBox(NULL, "Hello World", "", MB_OK); return 0; }
[עריכה] XUL
<window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"> <box align="center"> <label value="Hello, world!" /> </box> </window>
[עריכה] פורמטי מסמכים
[עריכה] ASCII
- סדרת התווים הבאה, המובעת ברישום הקסה-דצימלי (עם תווי carriage return וnewline בסוף הסדרה)
48 65 6C 6C 6F 2C 20 77 6F 72 6C 64 21 0D 0A
[עריכה] HTML 4.01 Strict
(משתמש במערך התווים UTF-8.)
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <title>Hello, world!</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> </head> <body> <p>Hello, world!</p> </body> </html>
[עריכה] XHTML 1.1
(משתמש במערך התווים UTF-8.)
- יש לשים לב שגם מסמך זה חייב להשלח עם הגדרות תחילת מסמך (HTTP Header), רצוי כ"application/xhtml+xml", אך הוא יכול להשלח גם כ"application/xml" או "text/xml"; אולם אסור לשלוח אותו כ"text/html". למידע נוסף, ראה XHTML Media Types.
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> <head> <title>Hello, world!</title> </head> <body> <p>Hello, world!</p> </body> </html>
[עריכה] PostScript
/Courier findfont 24 scalefont setfont 100 100 moveto (Hello world!) show showpage
- בהרצת האינטרפרטר, יש לכתוב את השורה הבאה להצגתה
(Hello world!) stack
[עריכה] RTF
{\rtf1\ansi\deff0 {\fonttbl {\f0 Courier New;}} \f0\fs20 Hello, world! }
[עריכה] TeX
Hello world \bye
[עריכה] ראו גם
- Hello world program בשפות תכנות איזוטריות
- תוכנית מספר פיבונצ'י
- מונחים במחשבים