Hello, world!

Запрос «Hello World» перенаправляется сюда; см. также другие значения.

«Hello, world!» — программа, результатом работы которой является вывод на экран или иное устройство фразы «Hello, world!» (в дословном переводе с английского — «Здравствуй, мир!»; представляет собой распространённое неформальное приветствие, близкое к русскому «всем привет!»). Также используются вариации с другой пунктуацией или регистром — например, «Hello World». Обычно это первый пример программы в учебниках по программированию, и для многих студентов такая программа является первым опытом при изучении нового языка.

Пример «Hello world» с графическим интерфейсом на GTK+. На заднем плане gedit с исходным кодом на Perl

Такая постановка задачи обращает внимание учащегося сразу на несколько ключевых моментов языка программирования, главным из которых является базовая структура программы.

Хотя небольшие проверочные примеры использовались с тех самых пор, как появились компьютеры, традиция использования фразы «Hello, world!» в качестве тестового сообщения была введена в книге «Язык программирования Си» Брайана Кернигана и Денниса Ритчи, опубликованной в 1978 году.

В среде программирования микроконтроллеров при отсутствии дисплея простейшей программой «Hello, world» является программа «blink», реализующая мигание светодиода на одном из выходов микроконтроллера. Цель такой программы является успешная компиляция программы (при изучении нового микроконтроллера или новой среды разработки), прошивка программы в микроконтроллер и демонстрация работоспособности самого микроконтроллера.

Перевод на русский язык

«Hello, world» на графическом языке Piet

Русскоязычные программисты и технические переводчики традиционно переводят слово world в его основном значении — «мир, свет, вселенная», отчего из «hello world» получается дословное «здравствуй, мир». Объясняется такой перевод тем, что программа, начиная работу, как бы рождается и приветствует мир, в который она приходит.

Более знакомые с тонкостями английского языка указывают на то, что у world имеются и другие значения — «народ», «общество», «человечество»[1], а «hello world» является распространённым неформальным приветствием, адресованным неопределённому кругу лиц (людей, а не просто произвольных объектов или природе в целом). Поэтому переводить приветствие следует как «всем привет», «привет, народ», «здорово, люди» и т. п., что подтверждается англоязычными программистами[2][3].

В аналогичном смысле слово world применяется при назначении прав доступа (owner, group, world) в операционных системах UNIX, для которых был разработан язык C, откуда и пошла традиция выводить «hello world» в качестве приветствия. owner означает владельца объекта, group — группу пользователей, в которую входит владелец, а world — всех остальных пользователей системы.

Примеры

Примеры программы на различных языках

C в устаревшем варианте K&R:[4]

#include <stdio.h>

main()
{
    printf("hello, world!\n");
}

Современный пример, соответствующий стандарту ANSI C.[5]:

#include <stdio.h>

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

C++:[6]

#include <iostream>

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

C#:

using System;

class HelloWorld
{
    static void Main()
    {
      Console.WriteLine("Hello, world!");
    }
}

Паскаль:

begin
writeln('Hello, world!');
end.

Visual Basic (6.0):

Private Sub Form1_Load()
    Print "Hello, world!"
End Sub

Java:

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

Go:

package main;

import "fmt"

func main() {
    fmt.Println("Hello, world!")
}

Ruby и Tcl:

puts "Hello, World!"

Python, Lua, Perl, Kotlin и Swift:

print("Hello, world!")

Python (альтернативный вариант):

import __hello__

Rust:[7]

fn main() {
    println!("Hello, world!");
}

PHP:

<?php
echo "Hello, world!";
?>

JavaScript (браузерный вариант):

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

На языке JavaScript (Node.JS вариант):

console.log("Hello, world!");

Processing:

void setup (){
  size(400,150);
  background(255);
  textSize(30);
  fill(0);
  text("Hello World",100,100);
}

Common Lisp:

(format t "Hello, world!~%")

NASM:

global start
   
section .text
  
start:
    mov     rax, 0x2000004 ; write
    mov     rdi, 1 ; stdout
    mov     rsi, "Hello, world!"
    mov     rdx, 13
    syscall
 
    mov     rax, 0x2000001 ; exit
    mov     rdi, 0
    syscall

1С:

Сообщить ("Hello, world!");

Brainfuck:

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

Dart:

main() {
    print("Hello, World!");
}

На эзотерическом языке HQ9+:

H

На эзотерическом языке Malbolge:

('&%:9]!~}|z2Vxwv-,POqponl$Hjig%eB@@>}=<M:9wv6WsU2T|nm-,jcL(I&%$#"`CB]V?Tx<uVtT`Rpo3NlF.Jh++FdbCBA@?]!~|4XzyTT43Qsqq(Lnmkj"Fhg${z@>

На эзотерическом языке Whitespace:

Каждому символу Пробел, Таб, и Перевод строки предшествует комментарий "S", "T", и "L", соответственно:

S S S T	S S T	S S S L

T L S S S S S T T S S T S T L T L S S S S S T T S T T S S L T L S S S S S T T S T T S S L T L S S S S S T T S T T T T L T L S S S S S T S T T S S L T L S S S S S T S S S S S L T L S S S S S T T T S T T T L T L S S S S S T T S T T T T L T L S S S S S T T T S S T S L T L S S S S S T T S T T S S L T L S S S S S T T S S T S S L T L S S S S S T S S S S T L T L S S L L Lstyly=

Маргинальные примеры

Данная группа примеров призвана показать громоздкость некоторых технологий.

Пример программы на C++ с использованием Component Object Model
[
    uuid(2573F8F4-CFEE-101A-9A9F-00AA00342820)
]
library LHello
{
    // bring in the master library
    importlib("actimp.tlb");
    importlib("actexp.tlb");
    // bring in my interfaces
#include "pshlo.idl"
    [
        uuid(2573F8F5-CFEE-101A-9A9F-00AA00342820)
    ]
    cotype THello
    {
        interface IHello;
        interface IPersistFile;
    };
};
[
    exe,
    uuid(2573F890-CFEE-101A-9A9F-00AA00342820)
]
module CHelloLib
{
    // some code related header files
    importheader();
    importheader();
    importheader();
    importheader("pshlo.h");
    importheader("shlo.hxx");
    importheader("mycls.hxx");
    // needed typelibs
    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)
{
    // when the object count goes to zero, stop the server
    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);
    // Initialize the OLE libraries
    CoInitializeEx(NULL, COINIT_MULTITHREADED);
    CoRegisterClassObject(CLSID_CHello, pCF, CLSCTX_LOCAL_SERVER,
        REGCLS_MULTIPLEUSE, &dwRegistration);
    // wait on an event to stop
    WaitForSingleObject(hEvent, INFINITE);
    // revoke and release the class object
    CoRevokeClassObject(dwRegistration);
    ulRef = pCF->Release();
    // Tell OLE we are going away.
    CoUninitialize();
    return(0); 
}
extern CLSID CLSID_CHello;
extern UUID LIBID_CHelloLib;
CLSID CLSID_CHello = { /* 2573F891-CFEE-101A-9A9F-00AA00342820 */
    0x2573F891,
        0xCFEE,
        0x101A,
    { 0x9A, 0x9F, 0x00, 0xAA, 0x00, 0x34, 0x28, 0x20 }
};
UUID LIBID_CHelloLib = { /* 2573F890-CFEE-101A-9A9F-00AA00342820 */
    0x2573F891,
        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];
    // get object 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);
    }
    // get print string
    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);
    // Initialize the OLE libraries
    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)) {
            // print a string out
            pHello->PrintSz(wcsT);
            Sleep(2000);
            ulCnt = pHello->Release();
        }
        else
            printf("Failure to connect, status: %lx", hRslt);
        // Tell OLE we are going away.
        CoUninitialize();
    }
    return 0;
}

Другие программы

В учебниках по программированию используются и другие программы:

  • Пустая программа — ничего не делает, но корректно запускается и выгружается из памяти.
  • «99 бутылок пива» демонстрирует простейшее применение циклов с выводом текста на экран.
  • Программы вычисления факториала и чисел Фибоначчи.
  • Куайн — программа, печатающая саму себя.
  • JAPH.

Примечания

  1. World | Define World at Dictionary.com  (неопр.). Дата обращения: 23 марта 2012. Архивировано 16 марта 2012 года.
  2. Exact meaning of the «world» in «hello world» — The UNIX and Linux Forums
  3. Exact meaning of the «hello world» — comp.unix.programmer | Google Groups
  4. Kernighan & Ritchie (1988). The C Programming Language. 2nd edition, p. 6.
  5. Архивированная копия  (неопр.). Дата обращения: 1 августа 2011. Архивировано 22 августа 2011 года.
  6. Bjarne Stroustrup (1274). The C++ Programming Language. 3rd edition, p. 46.
  7. Hello, World! - The Rust Programming Language  (неопр.). Дата обращения: 29 апреля 2019. Архивировано 28 марта 2019 года.

Литература

  • Dena, Christy, Jeremy Douglass, and Mark Marino. Benchmark fiction: A framework for comparative new media studies. // Digital Arts and Culture Conference, Bergen, Norway. Proceedings. 2005. (англ.)

Ссылки

  • Коллекция «The Hello World» Архивная копия от 11 января 2005 на Wayback Machine — более 400 программ, включая «Hello World» на 60+ реальных языках
  • Hello world на многих языках Архивная копия от 16 января 2009 на Wayback Machine (проект заморожен)
  • GNU Humor Collection Архивная копия от 19 апреля 2007 на Wayback Machine — юмор
  • Визуальный код для Google Earth Архивная копия от 17 мая 2009 на Wayback Machine — художественные работы
  • http://programm.ws/ Архивная копия от 16 февраля 2022 на Wayback Machine Программирование для начинающих