Hello World – Leitura de Final de Semana

Quando as pessoas aprendem a programar, a primeira coisa que talvez façam é testar a coisa mais simples que se faz naquela linguagem de programação.

Em 1974 no Bell Labs quando Brian Kernhigan escrevia seu livro sobre a linguagem C, ele colocou o seguinte exemplo:

 #include <stdio.h>
 int main() 
 {
        printf("hello, world");
        return 0;
 }

Apesar do fato do próprio Kernighan já ter usado o hello world num exemplo da linguagem B o código acima foi o que ficou famoso.

De lá para cá, em muitas linguagens de programação se fez exemplos de Hello World.

Eu lembro que quando aprendi a programar, era o ano de 1985, tinha 10 anos na época e o computador era um TK85 rodando Basic. O primeiro programa que escrevi nele foi:

10 PRINT "OI"
20 GOTO 10

Nada sofisticado, mas para um garoto de 10 anos era algo fascinante.

O legal dos programas deste tipo é que para o programador experiente dão uma idéia do jeitão da sintaxe daquela linguagem:

program hello;
 
begin
  Writeln('Hello, world!');
end.

Quem adivinha qual é a linguagem abaixo?

:- write('Seu mane nao use o Google!'),nl.

Para quem tiver curiosidade de ver como é o hello world em quase todas as linguagens de programação, dê uma olhada neste texto do WikiBooks ou nesta coleção com 400 exemplos.

Ou então clique abaixo e se divirta com a piadinha famosa…

How the way people code “Hello World” varies depending on their age and job:

High School/Jr. High

 10 PRINT "HELLO WORLD"
 20 END

First year in College

program Hello(input, output)
 begin
 writeln('Hello World')
 end.

Senior year in College

(defun hello
 (print
 (cons 'Hello (list 'World))))

New professional

#include <stdio.h>
 
 void main(void)
 {
  char *message[] = {"Hello ", "World"};
  int i;
  for(i = 0; i < 2; ++i)
  printf("%s", message[i]);
  printf("\n");
 }

Seasoned professional

#include <iostream.h>
 #include <string.h>
 class string
 {
  private:
   int size;
   char *ptr;
  public:
   string() : size(0), ptr(new char('\0')) {}
   string(const string &s) : size(s.size)
   {
     ptr = new char[size + 1];
     strcpy(ptr, s.ptr);
   }
   ~string()
   {
     delete [] ptr;
   }
   friend ostream &operator <<(ostream &, const string &);
   string &operator=(const char *);
 };
 
 ostream &operator<<(ostream &stream, const string &s)
 {
   return(stream << s.ptr);
 }
 string &string::operator=(const char *chrs)
 {
   if (this != &chrs)
   {
     delete [] ptr;
     size = strlen(chrs);
     ptr = new char[size + 1];
     strcpy(ptr, chrs);
   }
   return(*this);
 }
 int main()
 {
   string str;
   str = "Hello World";
   cout << str << endl;
   return(0);
 }

Master Programmer

 [
  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(<windows.h>);
      importheader(<ole2.h>);
      importheader(<except.hxx>);
      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 <windows.h>
  #include <ole2.h>
  #include <stdio.h>
  #include <stdlib.h>
  #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
", 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 <windows.h>
  #include <ole2.h>
  #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 <windows.h>
  #include <ole2.h>
  #include <stdlib.h>
  #include <string.h>
  #include <stdio.h>
  #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);
  }

System Administrator

 #include <stdio.h>
 #include <stdlib.h>
 main()
 {
  char *tmp;
  int i=0;
  /* on y va bourin */
  tmp=(char *)malloc(1024*sizeof(char));
  while (tmp[i]="Hello Wolrd"[i++]);
  /* Ooopps y'a une infusion ! */
  i=(int)tmp[8];
  tmp[8]=tmp[9];
  tmp[9]=(char)i;
  printf("%s\n",tmp);
 }

Apprentice Hacker

#!/usr/local/bin/perl
 $msg="Hello, world.\n";
 if ($#ARGV >= 0) {
     while(defined($arg=shift(@ARGV))) {
	 $outfilename = $arg;
	 open(FILE, ">" . $outfilename) || die "Can't write $arg: $!\n";
	 print (FILE $msg);
	 close(FILE) || die "Can't close $arg: $!\n";
     }
 } else {
     print ($msg);
 }
 1;

Experienced Hacker

#include <stdio.h>
 #include <string.h>
 #define S "Hello, World\n"
 main(){exit(printf(S) == strlen(S) ? 0 : 1);}

Seasoned Hacker

% cc -o a.out ~/src/misc/hw/hw.c
% a.out
Hello, world.

Guru Hacker

 % cat
 Hello, world.

New Manager (do you remember?)

 10 PRINT "HELLO WORLD"
 20 END

Middle Manager

mail -s "Hello, world." bob@b12
 Bob, could you please write me a program that prints "Hello, world."?
 I need it by tomorrow.
 ^D

Senior Manager

 % zmail jim
 I need a "Hello, world." program by this afternoon.
Chief Executive
 % letter
 letter: Command not found.
 % mail
 To: ^X ^F ^C
 % help mail
 help: Command not found.
 % damn!
 !: Event unrecognized
 % logout

Research Scientist

	PROGRAM HELLO
	PRINT *, 'Hello World'
	END

Older research Scientist

	
    WRITE (6, 100)
    100 FORMAT (1H ,11HHELLO WORLD)
	CALL EXIT
	END

Comments on this entry are closed.

  • Diego Esmerio

    “Quem adivinha qual é a linguagem abaixo?

    :- write(‘Seu mane nao use o Google!’),nl.”

    Isso é Prolog, não? Meu professor de lógica nos fez aprender essa linguagem e fazer um chatbot com ela… =/

  • Pedro Paulo

    Certa a resposta!

  • Não podia ser outra coisa senão Prolog. Mas vou assumir que você colocou :- na frente para dar a dica, já que não é necessário para só imprimir “Hello World” =) Prolog é uma linguagem divertida. 😀

    Mais uma vez, aproveitando pra adicionar algo, o menor Hello World que conheço (em ruby):
    p “Hello World!”

  • Tenho muita implicância com prolog. Mais ou menos a mesma implicância que o Pedro Paulo tem com o Java. 🙂

    Lembro bem daquele TK85. Bons tempos. Ou programávamos ou digitávamos código BASIC dos programas das revistas de informática.

  • Marcelo Barros

    TK82C, TK85, MSX, … uma boa lista de máquinas. Prologue nunca entrou na minha cabeça, ainda mais no estilo auto-didata de sempre.

  • Lembro que aprendi o BASIC aos 12 anos e era tão divertido, tinha um livro do José Antonio Borges, da UFRJ, se chamava “BASIC – APLICAÇÕES COMERCIAIS” e graças a ele consegui programar meus primeiros sistemas para aplicações financeiras, e logo depois me vi às voltas com COBOL aos 15 quando fui trabalhar de office-boy num bando e fui aproveitado como estagiário de operador de sistemas, foi muito interessante essa época.

  • @eagle o José Antonio Borges foi meu professor na UFRJ. 🙂

  • Pedro Paulo

    @panaggio – Ruby também é legal.

    O @marcelobarros é nosso decano aqui. Ele é o único que teve um TK-82C com teclado de membrana

  • @javsmo foi a primeira vez que eu li e programei em BASIC, foi num Prológica CP-500 (TRS-80), era muito manero e fazíamos toda a programação com os algorítimos de bloco pra depois passarmos pra linha de comando. Bons tempos. #saudades.