Hello, world!

Приклад "Hello world" з графічним інтерфейсом на GTK +. На задньому плані gedit з вихідним кодом на Perl
"Hello world" на графічній мові Piet

"Hello, world!" - Програма, результатом роботи якої є вивід на екран або інший пристрій фрази "Hello, world!" (У дослівному перекладі з англійської - "Здрастуй, світ!"; Являє собою поширене неформальне вітання, близьке до російського "всім привіт!"). Також використовуються варіації з іншого пунктуацією або регістром - наприклад, "Hello World". Зазвичай це перший приклад програми в підручниках з програмування, і для багатьох студентів така програма є першим досвідом при вивченні нової мови.

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

Хоча невеликі тестові приклади використовувалися з тих самих пір, як з'явилися комп'ютери, традиція використання фрази "Hello, world!" в якості тестового повідомлення була введена в книзі " Мова програмування Сі " Брайана Керніган і Денніса Рітчі, опублікованій в 1978.


1. Переклад на російську мову

Російськомовні програмісти і технічні перекладачі традиційно перекладають слово world в його основному значенні - "світ, світло, всесвіт", отчого з "hello world" виходить дослівне "здрастуй, світ". Пояснюється такий переклад тим, що програма, починаючи роботу, як би народжується і вітає світ, в який вона приходить.

Більш знайомі з тонкощами англійської мови вказують на те, що у world є й інші значення - "народ", "суспільство", "людство", [1] а "hello world" є поширеним неформальним привітанням, адресованим невизначеному колу осіб (людей, а не просто довільних об'єктів або природі в цілому). Тому переводити вітання слід як "всім привіт", "привіт, народ", "здорово, люди" і т. п., що підтверджується англомовними програмістами. [2] [3]

В аналогічному сенсі слово world застосовується при призначенні прав доступу (owner, group, world) в операційних системах UNIX, для яких була розроблена мова C, звідки і пішла традиція виводити "hello world" в якості привітання. owner означає власника об'єкта, group - групу користувачів, в яку входить власник, а world - всіх інших користувачів системи.


2. Цікаві факти

  • В індійському фільмі " Робот ", знятому в 2010-му році, слова" Hello, world! "стали першою фразою, яку він виголосив андроїдом чити-Бабу.
  • У середовищі прихильників мови Perl замість "Hello, world!" використовується фраза " Just another Perl hacker "(" Просто ще один Перл-хакер ")

3. Приклади

Приклад програми на різних мовах

На мові C в застарілому варіанті K & R : [4]

 # Include   main  (  )  {  printf  (  "Hello, world  \ N  "  )  ;  } 

Сучасний приклад, відповідний стандарту ANSI C. [5]

 # Include   int  main  (  void  )  {  printf  (  "Hello, world  \ N  "  )  ;  return  0  ;  } 

На мові C + + : [6]

 # Include   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!" 

На мовах Python 2.x і Perl :

 print  "Hello, world!" 

На мові PHP :

  echo  "Hello, world!"  ;  ?> 

На мові Common Lisp :

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

На езотеричному мовою HQ9 + :

 H 

4. Маргінальні приклади

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

Приклад програми на 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  ;  } 

5. Інші програми

У підручниках з програмування використовуються і інші програми:

  • Порожня програма - нічого не робить, але коректно запускається і вивантажується з пам'яті.
  • " 99 пляшок пива "демонструє найпростіше застосування циклів, друкує віршик:
 99 пляшок пива на стіні! 99 пляшок пива! Візьми одну і випий її - 98 пляшок пива на стіні! 98 пляшок пива! <...> 1 пляшка пива на стіні! 1 пляшка пива! Візьми одну і випий її - Немає більше пляшок пива на стіні! 

Примітки

  1. World | Define World at Dictionary.com - dictionary.reference.com / browse / world
  2. Exact meaning of the "world" in "hello world" - The UNIX and Linux Forums - www.unix.com/programming/179767-exact-meaning-world-hello-world.html
  3. Exact meaning of the "hello world" - comp.unix.programmer | Google Groups - groups.google.com/group/comp.unix.programmer/browse_thread/thread/44959e0875fbff0c #
  4. Kernighan & Ritchie (1988). The C Programming Language. 2nd edition, p. 6.
  5. http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1124.pdf - www.open-std.org/jtc1/sc22/wg14/www/docs/n1124.pdf
  6. Bjarne Stroustrup (1997). The C + + Programming Language. 3rd edition, p. 46.