- Hello, world!
-
«Hello, world!» — программа, результатом работы которой является вывод на экран или иное устройство фразы «Hello, world!» (в дословном переводе с английского — «Здравствуй, мир!»; представляет собой распространённое неформальное приветствие, близкое к русскому «всем привет!»). Также используются вариации с другой пунктуацией или регистром — например, «Hello World». Обычно это первый пример программы в учебниках по программированию, и для многих студентов такая программа является первым опытом при изучении нового языка.
Такая постановка задачи обращает внимание учащегося сразу на несколько ключевых моментов языка программирования, главным из которых является базовая структура программы.
Хотя небольшие тестовые примеры использовались с тех самых пор, как появились компьютеры, традиция использования фразы «Hello, world!» в качестве тестового сообщения была введена в книге «Язык программирования Си» Брайана Кернигана и Денниса Ритчи, опубликованной в 1978 году.
Содержание
Перевод на русский язык
Русскоязычные программисты и технические переводчики традиционно переводят слово world в его основном значении — «мир, свет, вселенная», отчего из «hello world» получается дословное «здравствуй, мир». Объясняется такой перевод тем, что программа, начиная работу, как бы рождается и приветствует мир, в который она приходит.
Более знакомые с тонкостями английского языка указывают на то, что у world имеются и другие значения — «народ», «общество», «человечество»,[1] а «hello world» является распространенным неформальным приветствием, адресованным неопределённому кругу лиц (людей, а не просто произвольных объектов или природе в целом). Поэтому переводить приветствие следует как «всем привет», «привет, народ», «здорово, люди» и т. п., что подтверждается англоязычными программистами.[2][3]
В аналогичном смысле слово world применяется при назначении прав доступа (owner, group, world) в операционных системах UNIX, для которых был разработан язык C, откуда и пошла традиция выводить «hello world» в качестве приветствия. owner означает владельца объекта, group — группу пользователей, в которую входит владелец, а world — всех остальных пользователей системы.
Интересные факты
- В индийском фильме «Робот», снятом в 2010-ом году, слова «Hello, world!» стали первой фразой, произнесённой андроидом Чити-Бабу.
- В среде поклонников языка Perl вместо «Hello, world!» используется фраза «Just another Perl hacker» («Просто ещё один Перл-хакер»)
Примеры
Пример программы на различных языкахНа языке 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; }
#include <iostream> int main() { std::cout << "Hello, world!" << std::endl; return 0; }
На языке Паскаль:
program MyProgram; begin WriteLn ('Hello, world!'); end.
Пример на языке Java.
package helloworld; public class HelloWorld { public static void main(String[] args) { System.out.println("Hello, world!"); } }
На языке Ruby
puts "Hello, World!"
print "Hello, world!"
На языке PHP:
<?php echo "Hello, world!"; ?>
На языке Common Lisp:
(format t "Hello, world!~%")
На эзотерическом языке HQ9+:
H
Маргинальные примеры
Данная группа примеров призвана показать громоздкость некоторых технологий.
Пример программы на 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 */ 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]; // 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 бутылок пива» демонстрирует простейшее применение циклов, печатает стишок:
99 бутылок пива на стене! 99 бутылок пива! Возьми одну и выпей её — 98 бутылок пива на стене! 98 бутылок пива! <…> 1 бутылка пива на стене! 1 бутылка пива! Возьми одну и выпей её — Нет больше бутылок пива на стене!
- Программы вычисления факториала и чисел Фибоначчи.
- Quine — программа, печатающая саму себя.
- JAPH.
Примечания
- ↑ World | Define World at Dictionary.com
- ↑ Exact meaning of the «world» in «hello world» — The UNIX and Linux Forums
- ↑ Exact meaning of the «hello world» — comp.unix.programmer | Google Groups
- ↑ Kernighan & Ritchie (1988). The C Programming Language. 2nd edition, p. 6.
- ↑ http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1124.pdf
- ↑ Bjarne Stroustrup (1997). The C++ Programming Language. 3rd edition, p. 46.
Ссылки
- Коллекция «The Hello World» — более 400 программ, включая «Hello World» на 60+ реальных языках
- Hello world на многих языках (проект заморожен)
- GNU Humor Collection — юмор
- Визуальный код для Google Earth — художественные работы
Cornell Box • Stanford Bunny
Stanford Dragon • Чайник ЮтаHello, world! • A+B
Calgary Corpus• Canterbury Corpus
Локальные методы (Функция Розенброка)
Категория:- Программирование
Wikimedia Foundation. 2010.