Escolar Documentos
Profissional Documentos
Cultura Documentos
IDE?
depurador?
Plataformas
G++ Um componente do GCC, compilador padro do
Projecto GNU
Livre Unix, Linux, Mac
OS X, Windows e
AmigaOS
Dev-C++ IDE livre famosa entre iniciantes. Seu compilador
o MinGW, uma verso do G++ para Windows.
Livre
Windows
[7]
Ultimate++ U++ um framework C++ multi-plataforma, para
desenvolvimento rpido de aplicaes, focado na
produtividade de programadores.
Livre Unix, Linux, Mac
OS X e Windows
Intel C++ Produz cdigo otimizado para processadores Intel Proprietria Windows e Linux
Microsoft
Visual C++
o mais conhecido para a plataforma Windows,
com ferramentas e tecnologias auxiliares para
desenvolvimento nessa plataforma (como MFC,
ATL, COM, entre outras). Oferece ainda uma
verso gratuita com restries de uso
Proprietria Windows
C++
192
C++ Builder Ferramenta da Embarcadero (anteriormente da
Borland), que compartilha a mesma IDE do Delphi
chamada de RAD Studio, sendo possvel a
utilizao dos mesmos componentes visuais do
Delphi (VCL) em um cdigo C++.
Proprietria Windows
Qt Creator IDE especializada em (mas no restrita a)
desenvolvimento na plataforma Qt. Utiliza o g++
como compilador e o gdb como depurador (ou seus
equivalentes para MinGW em Windows).
Livre/Proprietria Linux, Windows e
Mac OS X
Open Watcom Suporta plataformas antigas, at ento sem suporte
completo biblioteca padro
Livre DOS, Windows,
OS/2 e Netware
Comeau C++ Pode ser experimentado pela Internet Proprietria Windows, Linux e
Solaris
Turbo C++ Possui verso gratuita no stio oficial e tambm
uma verso paga. similar ao C++ Builder.
Proprietria Windows
Eclipse Disponvel para C++ atravs da extenso CDT. Livre Windows, Linux,
JVM
NetBeans Possui verso especializada para C++ e tambm
disponvel atravs de um plugin.
Livre Windows, Linux,
Mac OS X, JVM
Anjuta Suporta muitas capacidades avanadas como
gerenciamento de projetos e um poderoso editor de
cdigo fonte. Uma nova verso do Anjuta (Anjuta
2.*) que integra o Glade est em desenvolvimento
ativo.
Livre Linux
Code::Blocks Ambiente aberto e multi-plataforma, em sua verso
para Windows utiliza o compilador MinGW,
apesar de tambm suportar outros compiladores
como o Visual C++, Digital Mars, Borland C++ 5.5
e Open Watcom.
Livre Windows, Linux,
Mac OS X
Digital Mars Proprietria Windows, DOS
Codelite Livre Windows, Linux,
Mac OS X
Geany Livre Windows, Linux
GNAT
Programming
Studio
Utiliza o compilador GCC Livre Windows, Linux,
Solaris
KDevelop Utiliza o compilador GCC Livre Windows, Linux
Aplicativos desenvolvidos em C++
Abaixo segue uma lista de exemplos de aplicativos parcial ou totalmente escritos em C++, de acordo com Bjarne
Stroustrup, que no garante sua preciso e veracidade, ainda que seja responsvel por sua publicao.
C++
193
Adobe Acrobat Maya
Adobe Illustrator Mars Pathfinder, Opportunity e outras sondas da NASA
Adobe Photoshop Microsoft Office
Amazon Microsoft Visual Studio (Visual Basic, Visual FoxPro, Visual C++)
BeOS Microsoft Windows (diversas verses)
Blender Mozilla Firefox
Common Desktop Environment Mozilla Thunderbird
Doom III (motor de jogo) MySQL
eMule Mquina virtual Java
Motores de busca Google, em especial Googlebot LibreOffice
Srie Half-Life Outlook Express
Internet Explorer PCSX2 (Emulador de Playstation 2)
iPod (GUI) SETI@home
KDE (Qt) Symbian OS
Lunar Magic Winamp
Mac OS X Tibia
Bibliografia
Bjarne Stroustrup. The Design and Evolution of C++. [S.l.]:Addison-Wesley, 1994. ISBN 0-201-54330-3
Andrei Alexandrescu e Herb Sutter. C++ Design and Coding Standards: Rules and Guidelines for Writing
Programs. [S.l.]:Addison-Wesley, 2004. ISBN 0-321-11358-6
Livro: Programao em C++ Builder 3, Autor: Roberto Falanga Jnior, Visual Books, Editora Catarinense de
Informtica, ISBN 85-85943-51-3
Ligaes externas
Material de estudo
Pgina oficial do comit C++ JTC1/SC22/WG21
[8]
(em ingls)
Happy Codings
[9]
(em ingls) algoritmos em C++
Comparativo entre compiladores
[10]
(em ingls)
Problemas de compatibilidade binria em C++
[11]
(em ingls)
Exemplos de compatibilidade binria em C++
[12]
(em ingls)
Bibliotecas e repositrios de cdigo
Poco Project
[13]
(em ingls) conjunto de bibliotecas C++ revisadas por especialistas.
csourcesearch.net
[14]
(em ingls) repositrio de cdigo livre C e C++
CommonCPP
[15]
(em ingls) classes fundamentais portveis da GNU
STLSoft
[16]
(em ingls) bibliotecas livres, compostas somente de cabealhos, com o intuito de servir como
extenso STL
C/C++ Reference
[17]
(em ingls) referncias de C e C++
C++
194
Referncias
[1] [1] Uma discusso sobre o tema encontra-se na seo de incompatibilidades.
[2] [2] Mais informaes sobre o C++ ABI podem ser obtidas no
[3] [3] Um exemplo o livro de Ivor Horton:
[4] [4] O construtor padro tambm criado automaticamente pelo compilador caso o desenvolvedor no tenha definido nenhum outro construtor
para a classe.
[5] Herb Sutter realiza uma comparao entre as tcnicas RAII e Dispose (que depende do conceito de finally) em seu blog pessoal:
[6] Dado um tipo de dado T, uma referncia pode ser definida para nulo atravs de T& var = *(T*)0;. Notar entretanto que obter o
contedo de nulo resulta em comportamento indefinido, o que indica m prtica de programao.
[7] Uma verso para Linux (http:/ / freshmeat.net/ projects/ dev-cpp) comeou a ser desenvolvida, mas foi abandonada em 2002
[8] http:/ / www. open-std.org/ jtc1/ sc22/ wg21/
[9] http:/ / www. cplusplus. happycodings. com/ Algorithms/
[10] http:/ / cmeerw. org/ prog/ freecpp/
[11] http:/ / techbase. kde. org/ Policies/ Binary_Compatibility_Issues_With_C+ +
[12] http:/ / techbase. kde. org/ Policies/ Binary_Compatibility_Examples
[13] http:/ / www.pocoproject. org/
[14] http:/ / csourcesearch. net/
[15] http:/ / www.gnu. org/ software/ commoncpp/
[16] http:/ / stlsoft.org/
[17] http:/ / www.cppreference.com/
Common Lisp
Common Lisp
Paradigma Multiparadigma, funcional, Orientao a Objetos
Surgido em 1984, 1994 para o ANSI Common Lisp
Criado por Comit ANSI X3J13, presidido por Guy L. Steele Jr.
Estilo de
tipagem:
forte, dinmica
Compiladores CLISP, Steel Bank Common Lisp, Embeddable Common Lisp, Armed Bear Common Lisp, Clozure Common Lisp,
Allegro Common Lisp, GNU Common Lisp, Corman Common Lisp, LispWorks
Influenciada
por
Lisp, Scheme, Smalltalk
Influenciou Dylan, Clojure, Ruby
Common Lisp uma implementao especfica da linguagem de programao Lisp multi-paradigma que suporta
programao funcional e procedural. Foi criada por Guy L. Steele nos anos 1980 a partir da linguagem Lisp com o
intuito de combinar aspectos de diversos dialetos Lisp anteriores, incluindo Scheme. Foi proposto inicialmente o
nome de "Standard Lisp" para a linguagem, mas em virtude de de um dialeto Lisp j existir com este nome, se
buscou um nome similar, resultando no nome "Common Lisp". Em 1994 foi publicada no padro ANSI Information
Technology - Programming Language - Common Lisp, registro X3.226-1994 (R1999).
[1]
. bem maior e
semnticamente mais complexa que Scheme uma vez que foi projetada para ser uma linguagem comercial e ser
compatvel com os diversos dialetos Lisp dos quais derivou.
Common Lisp
195
Exemplos de cdigo
Ol mundo
(defun ol-mundo
(format t "Ol mundo"))
Entrada e Sada
(defun pergunta (string)
(format t "~%~%~A" string)
(read))
(pergunta "Quantos anos voce tem? ")
Loops
(defun quadrados (inicio fim)
(do ((i inicio (+ i 1)))
((> i fim) 'fim)
(format t "~A ~A~%" i (* i i))))
Bibliografia
SEIBEL, PETER.(2005); Practical Common Lisp. Apress, 2005.
GRAHAM, Paul. Ansi Common Lisp. New Jersey:Prentice Hall, 1996. ISBN 0-13-370875-6
GRAHAM, PAUL.(1993); On Lisp. Prentice Hall, 1993. (Descreve tcnicas avanadas para uso de macros)
STEELE, Guy L.. Common Lisp - The Language. Lexington:Digital Press, 1990. ISBN 1-55558-041-6
TOURETZKY, DAVID S.(1990); Common Lisp - A Gentle Introduction to Symbolic Computation. Benjamin
Cummings, Redwood City, 1990. ISBN 0-8053-0492-4
Ligaes externas
Site do autor David S. Touretzky
[2]
Livro em pdf "Common Lisp: A Gentle Introduction to Symbolic Computation de David S. Touretzky"
[3]
Livro "Common Lisp - The Language" disponvel em formato HTML
[4]
Livro "Common Lisp The Language" pela Google books
[5]
Implementaes de Common Lisp
[6]
Livro do Paul Graham em pdf "On Lisp"
[7]
Common Lisp
196
Referncias
[1] Pgina do Documento (http:/ / webstore.ansi.org/ RecordDetail. aspx?sku=ANSI+ INCITS+ 226-1994+ (R2004)) no stio da ANSI
[2] http:/ / www. cs. cmu. edu/ ~dst/ LispBook/ index.html
[3] http:/ / www. cs. cmu. edu/ ~dst/ LispBook/ book. pdf
[4] http:/ / www. cs. cmu. edu/ Groups/ AI/ html/ cltl/ clm/ clm. html
[5] http:/ / books. google. com. br/ books?id=FYoOIWuoXUIC& dq=Common+ Lisp+ the+ Language& printsec=frontcover& source=bn&
hl=pt-BR& ei=SwcHSoP6GZuqtgfL0emdBw& sa=X& oi=book_result& ct=result& resnum=4#PRA1-PA780,M1
[6] http:/ / common-lisp. net/ ~dlw/ LispSurvey. html
[7] http:/ / lib.store. yahoo. net/ lib/ paulgraham/ onlisp. pdf
Miranda
Miranda
Surgido em 1985
Criado por David Turner
Estilo de tipagem: esttica, fortemente tipada
Compiladores Miranda
Influenciada por KRC, SASL, ML
Influenciou Haskell
Miranda uma linguagem de programao funcional, no restrita desenvolvida por David Turner, usando alguns
conceitos das linguagens de programao anteriores como SASL e KRC, utilizando alguns conceitos de ML e Hope.
Comercializada pela Research Software Ltda. da Inglaterra, da qual a palavra "Miranda" uma marca registrada, ela
foi a primeira linguagem puramente funcional, a ser utilizada como ferramenta comercial, e no para fins
acadmicos.
A soluo para a maioria dos problemas mais simples e sucinta em Miranda do que na maior parte das linguagens
de programao, exceto a APL, e algumas outras linguagens funcionais, relatam seus usurios, que lhes permite
produzir programas mais confiveis em menos tempo do que com o desenvolvimento da programao imperativa,
linguagens que eles tinham anteriormente utilizado.
Foi lanado em 1985, como um rpido interpretador em C para sistema operacional Unix-flavour, com subsequente
liberao, em 1987 e 1989. Mais tarde a linguagem de programao Haskell semelhante a muitos formatos de
Miranda.
Bibliografia
THOMPSON, Simon. Miranda: The Craft of Functional Programming. Reading,
Massachusetts:Addison-Wesley, 1995.451 p. ISBN 0-201-42279-4
Eiffel
197
Eiffel
A Wikipdia possui o portal:
Portal das tecnologias de informao
Eiffel uma linguagem de programao puramente orientada a objeto, que implementa as teorias sobre a orientao
a objeto de Bertrand Meyer.
Sendo Bertrand Meyer um terico francs da orientao a objeto, o nome da linguagem obviamente uma aluso
famosa Torre Eiffel, um dos smbolos de Paris e, portanto, da Frana.
Sendo este autor muito atento aos fundamentos tericos, a linguagem de programao Eiffel tem, ao lado de muitas
inovaes polmicas, um retorno aos clssicos. Especificamente, so usadas nela conceitos de linguagens muito mais
antigas, como Simula 67 (a primeira linguagem de programao orientada a objeto) e CLU, linguagem de
programao modular devida a Barbara Liskov, outra importante terica de tcnicas de projeto e programao de
software.
Dados
Eiffel uma linguagem orientada a objeto. Sua sintaxe similar ao PASCAL e ALGOL. Algumas de suas
caractersticas so: projeto por contrato, heranas multiplas, overload de operador e classes genricas. Entende-se por
projeto por contrato como uma forma de explicitar as condies de uso dos componentes (mdulos) de programas e
os resultados dos mesmos, estabelecendo prs e ps-condies que devem ser satisfeitas. Eiffel tem um tipo nico de
dados - todos os tipos so classes - ento possvel criar subclasses de classes bsicas como a classe "INTEGER". A
linguagem se prope a ser de uso geral, podendo ser usada para desenvolvimento de aplicaes financeiras, indstria,
sistemas de telecomunicaes, etc.
Histrico
Adaptao do texto do site da Eiffel Software:
A linguagem Eiffel foi concebida pela Eiffel Software (ento conhecida como ISE) em 1985, inicialmente como uma
ferramenta interna para desenvolver diversas aplicaes prprias. Os engenheiros de software da Eiffel necessitavam
de um poderoso ambiente para integrar os modernos conceitos da engenharia de software e orientao a objetos e
no havia simplesmente nada disponvel. Por esta razo, o Dr. Bertrand Meyer, fundador da Eiffel Software,
concebeu o compilador Eiffel 1. Ele foi apresentado ao pblico na primeira The International Conference on Object
Oriented Programming, Systems, Languages and Applications (OOPSLA)
[1]
em outubro de 1986, onde ele atraiu
considervel ateno, levando o Dr. Meyer a divulg-lo como um produto comercial, no final de 1986. A tecnologia
se espalhou rapidamente ao longo dos anos seguintes, com um histrico de sucesso em diversos projetos industriais
nos EUA, Canad, Europa e Extremo Oriente. Logo no incio, Eiffel tambm atraiu a ateno da comunidade
acadmica como uma ferramenta ideal para o ensino de programao em todos os nveis. Vrias universidades de
todo o mundo a tm usado no ensino primrio de linguagens de programao.
As sucessivas verses do ambiente surgiam em mdia de uma vez por ano. Eiffel tornou-se objeto de maior
visibilidade com a publicao, em 1988, do livro Object-Oriented Software Construction pelo Dr. Bertrand Meyer,
que rapidamente se tornou um best-seller e foi traduzido para oito lnguas, o livro utiliza Eiffel para explicar e
ilustrar os conceitos fundamentais de orientao a objeto e Design by Contract
[2]
.
A ltima iterao envolvendo a tecnologia original do Eiffel foi a verso 2.3, lanada em meados de 1990. A
prxima verso, Eiffel 3, foi escrito inteiramente em Eiffel. Eiffel 3 apresenta o Melting Ice Technology para
recompilao rpida, um ambiente grfico com interface totalmente inovadora para o usurio, com base em
Eiffel
198
conceitos e avanos considerveis em bibliotecas (grficos, rede ...) e otimizao do cdigo gerado. As primeiras
verses foram lanadas em Unix e seguido pelo Linux, VMS, OS / 2, Windows (Windows 3.1, Windows 95,
Windows NT),. NET, e Mac OS X.
Hoje, a tecnologia Eiffel continua a empurrar as fronteiras do desenvolvimento de software. Com a introduo do
EiffelStudio , os programadores podem tirar partido de uma IDE eficiente para alcanar a mais alta qualidade,
robustez, escalabilidade de aplicaes reutilizveis - em todas as principais plataformas. Com EiffelEnvision , os
programadores podem ainda usar o poder da linguagem Eiffel dentro do popular ambiente do Microsoft Visual
Studio. NET.
Caractersticas
Eiffel no case-sensitive. Alm disso, o uso de um smbolo de fim-de-instruao opcional e deixado a critrio do
programador. Muitos programadores em Eiffel optam por omitir o ponto-e-vrgula exceto quando colocam mais de
uma instruo numa linha. O fato dela nao ser case-sensitive favorece bastante a sua redigibilidade.
Simplicidade
Eiffel tem apenas seis instrues de execuao bsicas:
* Atribuio
* Criao de um objeto
* Chamada de rotina
* Condicional
* Iterao
* Escolha (case)
Ao contrrio de muitas outras linguagens O.O., mas similar ao SmallTalk?, Eiffel no permite modificar campos de
objetos que no sejam do objeto atual. O mesmo ocorre com variveis locais da rotina atual. Qualquer modificao
em outros objetos devem ser feitas atravs de seus respectivos mtodos.
Compiladores para a linguagem Eiffel podem ser encontrados para diversos sistemas operacionais e plataformas de
hardware, destacando-se as seguintes: PC: DOS, OS/2, Windows 3.1, Windows 95, Windows NT, PC
Unix(Interactive, SCO, and ESIX), Nextstep, Linux Outras plataformas de Hardware: Sparc (SunOS & Solaris),
NeXTStep, HP9000, DEC 5xxx, Sony News, DG Aviion, DEC Alpha OSF-1, DEC OpenVMS, RS6000, Pyramid,
QNX, Silicon Graphics, Macintosh (Motorola& PowerPC).
Tipos
S h um tipo de dado em Eiffel: a classe. Optando por essa metodologia, a linguagem tem uma alta ortogonalidade,
favorecendo a legibilidade e redigibilidade, pois no h tantos critrios a serem aprendididos, para ento ser escrito
um cdigo ou ento ser feita a manuteno do mesmo. Toda modelagem de outros tipos de dados deve partir de uma
classe. Todo cdigo deve existir sob o contexto de uma classe. Ela uma linguagem estaticamente tipada e todos os
erros de tipos so verificados em tempo de compilao. Ela tambm fortemente tipada. Eiffel tem um nmero de
tipos bsicos (algumas vezes chamados de "embedded types")embutidos. Estes tipos bsicos incluem: BOOLEAN,
CHARACTER, INTEGER, REAL. Uma operao de atribuiao s permitida se os tipos envolvidos sejam
concordantes. Vamos explicar cmo se d isso:
* Uma classe A um ancestral da classe B se A e B so da mesma classe ou A um ancestral
de um pai de B.
* Uma classe B um descendente da classe A se A um ancestral de B.
A Classe B concorda com a classe A se e somente se B um descendente de A.
Eiffel
199
Tipos de Polimorfismo
Polimorfismo Universal Paramtrico
Uma funo ou uma classe que siga o polimorfismo universal paramtrico tem um parmetro de tipo (implcito ou
explcito), que determina o tipo de argumento para cada aplicao dessa funo /classe.
Exemplo:
class Complexo
creation
initComplexo
feature
parteReal, parteImag : REAL
feature
initComplexo (r, i : REAL) is
do
parteReal := r;
parteImag := i;
end;
Referncia ao objeto Complexo e a inicializao deste objeto:
c1: Complexo;
!!c1.initComplexo(2.4, -3.2);
Polimorfismo Universal por Incluso
Um objeto pode ser visto como pertencendo a diferentes classes que no precisam ser disjuntas
class A
create make
feature
make is do end
metodo is do
print("Classe A%N")
end
end
class B inherit A
redefine metodo end
create make
feature
metodo is do
print("Classe B%N")
end
end
Referncia aos objetos e inicializao deles
!!ca.make
!!cb.make
ca:=cb
ca.metodo
Eiffel
200
Ser impresso Classe B
Sobrecarga
A linguagem Eiffel no suporta duas funes/mtodos com o mesmo nome mas assinaturas diferentes.
Coero
A linguagem Eiffel no permite que um argumento seja convertido para o tipo esperado por uma funo, evitando
assim um erro de tipo.
Projeto Por Contrato
Texto retirado do site da Eiffel Software:
" Um conceito revolucionrio para se fazer softwares confiveis, introduzido pela Eiffel e apenas implementada na
Eiffel. A idia bsica que para fazer software confivel no suficiente ser "cuidadoso" e utilizar todo tipo de
checagem ao longo do cdigo. Uma abordagem mais sistemtica essencial. Atravs do conceito de projeto por
contrato, voc enxerga seu sistema como feito de um nmero de componentes complementares - as classes em Eiffel
- os quais cooperam baseados em declaraes precisas de obrigaes e benefcios mtuos: contratos, assim como
contratos entre cliente e empresa. Eiffel obriga diretamente o projeto por contrato atravs de construes como class
invariants , pr-condies e ps-condies. Admita por exemplo, que ns queremos que nossos contadores sejam
sempre no-negativos. A classe ter agora uma invariante :
indexing ... class
COUNTER
feature
...
invariant
item >=0
end
e a feature decremento agora neceessita de uma pr-condio, para certificar-se de que o cliente no realiza uma
operao ilegal. A palavra-chave require inicia a pre-condio.
decrement is
-- Decrease counter by one
require
item > 0
do
item := item -1
ensure
item= old item -1
end.
-- old "item" representa o valor de "item" antes do mtodo ser chamado.
A palavra-chave ensure inicia a ps-condio.
A pr-condio diz ao cliente:
* "Nem pense em me chamar se no tiver absoluta certeza de que counter estritamente positivo"
A ps-condio diz:
Eiffel
201
* "Se voc for um bom garoto( cumpriu a pr-condio ), aqui est o que eu prometo fazer para
voc quando retornar: eu irei decrementar counter em uma unidade."
Pr-condies, ps-condies e invariantes so chamadas asseres. "
Asseres
Segundo a Sun: "Uma assero um comando contendo uma expresso booleana que o programador acredita ser
verdadeira no momento que o comando executado". Ou seja, a assero um recurso da linguagem para testar as
suposies feitas pelo programador dentro do cdigo.
Verificao de asseres
* Asseres como pr e ps-condies tem um primeiro papel de documentar o mtodo.
* A verificao de asseres pode ser habilitada em tempo de execuo.
* Se uma assero no satisfeita, ento
o Se for uma pr-condio, o cliente do mtodo possui uma falha.
o Se for uma ps-condio, o mtodo provedor falho.
A assero favorece em muito a confiabilidade de um programa, devido as suas prs e ps condies.
"Hello World"
class HELLO_WORLD
create
make
feature
make is
do
io.put_string("Hello World!%N")
end
end
Eiffel
202
Bibliografia
MEYER, Bertrand. Eiffel the Language. Hemel Hempstead:Prentice Hall International(UK), 1992.594 p. ISBN
0-13-247925-7
WIENER, Richard. An Object-Oriented Introduction to Computer Science Using Eiffel. Upper Saddle River, New
Jersey, EUA:Prentice Hall, 1996.378 p. ISBN 0-13-183872-5
Referncias
Eiffel Software [3]
Projeto Por Contrato, David Dharbe, DIMAp/UFRN [4]
GabrielRocha - 17 Oct 2005 [5]
TWiki [6]
Trabalho acadmico sobre Eiffel apresentado na disciplina de Linguagem de Programao na Escola Politcnica
da USP [7]
Ligaes externas
(em ingls) Pgina oficial da linguagem
[3]
Referncias
[1] http:/ / en. wikipedia. org/ wiki/ OOPSLA
[2] http:/ / en. wikipedia. org/ wiki/ Design_by_Contract
[3] http:/ / www. eiffel.com/
[4] http:/ / monolith. consiste.dimap. ufrn. br/ ~david/ ENSEIGNEMENT/ SUPPORT/ 0805-projeto-por-contrato. pdf
[5] http:/ / twiki.dcc. ufba. br/ bin/ view/ Main/ GabrielRocha
[6] http:/ / twiki.dcc. ufba. br/ bin/ view/ MAT052/ Eiffel
[7] http:/ / linguagemeiffel. wordpress. com
Perl
203
Perl
Perl
Paradigma Multiparadigma: funcional, imperativo, Orientao a objetos, reflexivo, estruturado, genrico
Surgido em 1987
ltima verso 5.16.0 (20 de maio de 2012)
Verso em teste 5.17.0 (20 de maio de 2012)
Criado por Larry Wall
Estilo de tipagem: dinmica
Influenciada por AWK, C, C++, Lisp, Pascal, sed, Smalltalk, Shell do Unix
Influenciou Python, PHP, Ruby, ECMAScript, JavaScript, Falcon, Perl 6
Licena: GNU General Public License, Licena Artstica
Pgina oficial
www.perl.org
[1]
Perl uma linguagem de programao estvel e multiplataforma, usada em aplicaes de misso crtica em todos os
setores, sendo destacado o seu uso no desenvolvimento web de todos os tipos. Permite a criao de programas em
ambientes UNIX, MSDOS, Windows, Macintosh, OS/2 e outros sistemas operacionais. Alm de ser muito utilizada
para programao de formulrios www e em tarefas administrativas de sistemas UNIX - onde a linguagem nasceu e
se desenvolveu - possui funes muito eficientes para manipulao de textos.
Perl uma das linguagens preferidas por administradores de sistema e especialmente verstil no processamento de
cadeias (strings), manipulao de texto e no pattern matching implementado atravs de expresses regulares, alm
de ser bastante adequada para o desenvolvimento de projetos utilizando uma metodologia gil.
Seu slogan "There's more than one way to do it"(Existe mais de uma maneira de fazer isso) demonstra exatamente o
propsito da linguagem: sua flexibilidade e capacidade de fazer cdigos funcionais.
A linguagem Perl j foi portada para mais de 100 diferentes plataformas e bastante usada em desenvolvimento
web, finanas e bioinformtica.
Origem
A linguagem Perl foi desenvolvida por Larry Wall. Seu lanamento deu-se em 1987 (4 anos antes do Linux) quando
Larry postou o Perl no grupo de notcias da Usenet "comp.sources". Antes disso, praticamente todo processamento
de texto em sistemas baseados em Unix era feito com uma poro de ferramentas, tais como o AWK, 'sed', C e
diversas linguagens shell script. A ideia de Wall foi juntar as principais vantagens de todas essas linguagens:
expresses regulares do 'sed'; a identificao de padres de AWK; a profundidade de C; alm da sintaxe baseada
tanto em C quanto em Shell Script.
Pouco tempo depois de sua primeira verso, Perl se popularizou. Em 1992, encontrava-se j na verso 4 e tornou-se
uma linguagem padro para Unix. Porm, foi tambm nessa poca que a linguagem de Larry comeou a mostrar suas
limitaes. Apesar de ser excelente para administradores de sistemas escreverem pequenos e poderosos cdigos, era
invivel desenvolver programas maiores com o Perl. Foi quando a equipe, ainda liderada por Larry Wall, comeou a
desenvolver a verso 5, lanada em 1994. A partir de ento, a linguagem subiu de patamar; tornou-se, como muitos
acreditam, uma linguagem completa, e no apenas auxiliar.
Obs.: Para mais informaes, vide a timeline do Perl nos Links Externos
Perl
204
Caractersticas da linguagem
Atractor de Lorenz calculado com octave e convertido para SVG
utilizando um script Perl
No geral, a sintaxe de um programa em Perl se
parece muito com a de um programa em C: existem
variveis, expresses, atribuies, blocos de cdigo
delimitados, estruturas de controle e sub-rotinas.
Alm disso, Perl foi bastante influenciado pelas
linguagens de shell script: todas as variveis
escalares so precedidas por um cifro ($). Essa
marcao permite identificar perfeitamente as
variveis num programa, onde quer que elas estejam.
Um dos melhores exemplos da utilidade desse
recurso a interpolao de variveis diretamente no
contedo de strings. Perl tambm possui muitas
funes integradas para tarefas comuns como
ordenao e acesso de arquivos em disco.
Perl pega emprestado as listas de Lisp, as arrays
associativas (tabelas hash) de awk e as expresses
regulares de sed. Isso tudo simplifica e facilita
qualquer forma de interpretao e tratamentos de
textos e dados em geral.
A linguagem suporta estruturas de dados arbitrariamente complexas. Ela tambm possui recursos vindos da
programao funcional (as funes so vistas como um outro valor qualquer para uma subrotina, por exemplo) e um
modelo de programao orientada a objetos. Perl tambm possui variveis com escopo lxico, que tornam mais fcil
a escrita de cdigo mais robusto e modularizado.
Todas as verses de Perl possuem gerenciamento de memria automtico e tipagem dinmica. Os tipos e
necessidades de cada objeto de dados no programa so determinados automaticamente; memria alocada ou
liberada de acordo com o necessrio. A converso entre tipos de variveis feita automaticamente em tempo de
execuo e converses ilegais so erros fatais.
Pontos Fortes
Foi feito para fcil compreenso humana;
Perl muito porttil;
Perl excelente para manipulao de textos e arquivos;
Perl uma Linguagem de programao de alto nvel, tirando do programador muitas preocupaes referentes a
aspectos mais baixos;
Por conta da facilidade em seu aprendizado, inmeros cdigos so escritos para uso pessoal e, assim, no possuem a
preocupao da legibilidade. Por isso, muitas pessoas acabaram por dar linguagem a fama de ser mal estruturada e
ilegvel; o que errado, pois Perl admite uma boa escrita e estruturao, como muitas outras linguagens.
A linguagem Perl foi criada e desenvolvida com o ideal de Software livre. Esse aspecto tornou-se uma caracterstica
intrnseca e os programadores contam com uma ampla comunidade, que ajuda no desenvolvimento e manuteno da
linguagem e dos cdigos. Exemplo disso a CPAN, Comprehensive Perl Archive Network (rede de repositrios de
Perl). Este repositrio possui mais de 100 mil mdulos para Perl, bem como suas documentaes.
Perl
205
Resumo
Sua interface de integrao com banco de dados (DBI e DBIx::Class) suporta muitos bancos de dados, incluindo
Oracle, Sybase, PostgreSQL, MySQL e outros
Perl tem mdulos para trabalhar com HTML, XML, e outras linguagens de markup
Perl suporta Unicode
Perl permite programao procedural e orientada a objetos
Perl pode acessar bibliotecas externas em C/C++ atravs de XS ou SWIG
Perl extensvel. Existem milhares de mdulos disponveis no Comprehensive Perl Archive Network (CPAN)
O interpretador Perl pode ser embutido em outros sistemas
Perl e a World Wide Web
Perl conhecida como o "Canivete Suo da Internet";
O mdulo Perl CGI.pm, que faz parte da distribuio padro, serve como script do lado do servidor
Perl pode manipular dados criptografados, incluindo transaes de comrcio eletrnico;
mod perl permite que o servidor web Apache possa interpretar cdigos Perl diretamente;
O pacote DBI do Perl faz com que a integrao com banco de dados seja muito simples. E com pacote
DBIx::Class, utiliza-se orientao a objetos para trabalhar diretamente com bancos de dados;
Existe um Web Framework (servidores web) chamado Catalyst que feito em Perl, bastante utilizado;
Perl pode ser usado em praticamente todas as reas relacionadas Internet.
Portabilidade
Perl , seno a mais, uma das linguagens mais portteis;
Pode ser portada para mais de 100 Sistemas Operacionais diferentes;
Tipos de dados
O Perl tem uma srie de tipos de dados fundamentais, porm considerada uma linguagem no-tipada, ou seja, as
variveis no so restringidas a usar um nico tipo. Os mais utilizados so: escalar, vetor (array), hash (vetor
associativo), handle de um arquivo e sub-rotinas.
Escalar: um valor nico, que pode ser um nmero, uma string ou uma referncia. declarada com um '$', como:
$num
$joe
$pointer
Array: um conjunto sequencial ordenado de escalares. O ndice inicial de uma varivel array zero (0).
declarada com um '@', como:
@v
@list
@variable
Hash: Um hash, ou array associativo, um mapeamento (ou seja, chaves de referncias) de strings para escalares.
Representa uma coleo de pares de chave/valor. So declarados com um '%', como:
%people
%x
%this_is_a_hash
Handle: um mapeamento para um arquivo, dispositivo ou pipe, que aberto para leitura, escrita, ou ambos
Perl
206
Sub-rotina: um trecho de cdigo que pode ser executado, para o qual podem ser passados argumentos, e do qual
podem ser recebidos resultados
Exemplos de cdigo
A primeira linha de um cdigo em Perl deve sempre comear com o shebang:
#!/usr/bin/perl
Esta linha informa onde est localizado o compilador do Perl e pode variar de sistema para sistema.
Programa Ol Mundo!
#!/usr/bin/perl
print "Ol, Mundo!\n";
Comentrio
# Isto um comentrio em Perl
Note o ponto-e-vrgula no final de cada expresso. Assim como em C e C++, Perl exige que o usemos para indicar o
final de uma expresso. A ltima linha a que apaga o arquivo. unlink equivale a 'rm' e $0 uma referncia simples
ao arquivo que est sendo executado.
Expresso regular - Filtro
Um dos pontos fortes de Perl o eficiente uso de expresses regulares no tratamento de textos e arquivos.
Identificamos essas expresses pelos delimitadores "/.../", ou seja, tudo o que estiver entre essas barras ser tratado
como um pattern (padro) para ser encontrado em determinado texto. O programa a seguir l um texto e busca
exatamente a expresso "foo":
while(<>) {
/foo/;
print;
}
Assim como as expresses regulares de Linguagens Regulares, Perl admite alguns smbolos especiais que facilitam a
descrio de um padro. So eles:
"."
"*"
"?"
"+"
"[" e "]"
"(" e ")"
"{" e "}"
"^"
"$"
"|"
"\"
Se quisermos utilizar o real significado de um desses smbolos, basta colocarmos uma barra invertida exatamente
antes do mesmo.
O cdigo abaixo busca o padro assim descrito: nenhum ou muitos '+' seguido de um ou nenhum 'b'
Perl
207
while (<>) {
/\+*b?/
print;
}
possvel obter o mesmo resultado com uma nica linha (um "one-liner"):
perl -pi -e '/\+*b?/' arquivo.txt
De fato, comum a ocorrncia de problemas que exigem dezenas de linhas em outras linguagens de programao
mas que podem ser resolvidos com uma nica linha de cdigo em Perl, especialmente na rea de ETL.
Estruturas de controle
Perl tem as estruturas bsicas esperadas em qualquer linguagem de programao:
if
while
for
until
Perl tira boas idias de linguagens naturais, como a possibilidade de inverter a ordem dos elementos em uma frase.
Por exemplo:
if ($DEBUG) {
print "ouch!";
}
Pode ser reescrita como:
print "ouch!" if $DEBUG;
Mdulos e frameworks
Perl conseguiu reunir mdulos, classes, scripts e frameworks desenvolvidos pela comunidade em um s lugar, este
lugar chama-se CPAN, repositrio onde encontra-se quase tudo j desenvolvido para a linguagem:
Catalyst (software) - Framework MVC para aplicaes Web
DBIx::Class - Modelo de mapeamento Objeto Relacional
Template Toolkit - Sistema de processamento de templates
WWW::Mechanize - Simula um navegaror Web em um objeto Perl
POE - Framework para aplicaes multitarefa e em rede portveis
Perl
208
Interpretador Perl
Se voc est num sistema Linux (ou a maioria dos sistemas UNIX, incluindo Mac Os X), provavelmente j h uma
instalao do compilador Perl includa no seu sistema. Digite o seguinte comando no terminal para descobrir qual
verso voc tem instalada:
perl -v
Aplicaes
TWiki - Sistema Wiki de escrita de contedo colaborativo
RT - Sistema de processamento de Tickets
Apache Spam Assassin - Sistema extensvel de filtro de Spam em email
dvd::rip - Programa para cpias de DVD
AWStats - "Advanced Web Statistics" (AWStats) um sistema de anlise de logs de servidores Web e de gerao
de estatsticas
Comunidade
Um dos pontos mais fortes da linguagem Perl a comunidade de usurios em todo o mundo. Segundo a tradio
internacional, esses grupos so denominados Perl Mongers.
Um grande ponto de encontro da comunidade o YAPC. YAPCs so encontros promovidos pela comunidade para
discutir coisas sobre Perl, os encontros podem ter carter regional ou nacional. No Brasil ocorre uma vez por ano o
YAPC::Brasil "Encontro Brasileiro de Programadores Perl". Em 2009 o YAPC::Brasil aconteceu de 29 de outubro a
1 de novembro em Niteri, Rio de Janeiro
[2]
. Em 2010 o evento ocorreu de 25 a 31 de outubro em Fortaleza,
Cear
[3]
. Em 2013, o evento ocorrer nos dias 15 e 16 de Novembro, na cidade de Curitiba, Paran.
[1] http:/ / www. perl. org/
[2] Site do YAPC::Brasil 2009 (http:/ / www. yapcbrasil.org. br/ 2009)
[3] Site do YAPC::Brasil 2010 (http:/ / www. yapcbrasil.org. br/ 2010)
Bibliografia
Livro: PERL Guia de Consulta Rpida, Autor: Dcio Jr., Editora Novatec, ISBN 85-85184-80-9
Ligaes externas
Pgina oficial (http:/ / www. perl. org/ ) (em ingls)
Documentao da linguagem (http:/ / perldoc. perl. org/ ) (em ingls)
Introduo Linguagem Perl (http:/ / www. perl. org. br/ Perldoc/ V500807/ Perlintro) (em portugus)
Pgina da comunidade Perl em Portugal (http:/ / perl. pt/ ) (em portugus)
Pgina do Perl no Brasil (http:/ / perl. org. br) (em portugus brasileiro)
Timeline da Linguagem Perl (http:/ / embed. verite. co/ timeline/
?source=0Amb3R5QS8hjQdHp5YnBRT1B6bUptaUFneUxXVmhMQlE& font=Bevan-PotanoSans&
maptype=toner& lang=pt-br& height=650) (em portugus brasileiro)
Tutorial Perl Maven em Portugus (http:/ / br. perlmaven. com/ ) (em portugus brasileiro)
FL
209
FL
FL
Surgido em 1989
Criado por John Backus, John Williams, Edward Wimmers
Influenciada por FP
Influenciou J
FL (de Function Level) uma linguagem de programao criada no Almaden IBM Research Center por John
Backus, John Williams, e Wimmers Edward em 1989.
FL foi concebido como um sucessor da linguagem de programao anterior FP de Backus, proporcionando um apoio
especfico para o que denominou Backus funo da programao de nvel.
FL uma linguagem de tipagem dinmica, rigorosamente funcional, com uma semntica de lanar e capturar
excees bem parecida com a linguagem ML. Cada funo tem um argumento histrico implcito que usado para
fazer coisas como entradas/sadas estritamente funcionais, mas tambm utilizado para efetuar ligaes com cdigos
em linguagem C. Para fazer otimizaes, existe um sistema de tipagem que uma extenso do mecanismo de
inferncia de tipos de Hindley-Milner. Muitas das idias da linguagem, j foram implementadas na linguagem J de
Kenneth E. Iverson.
Referncias externas
The FL Project: Design of a Functional Language
[1]
(postscript)
Referncias
[1] http:/ / theory. stanford. edu/ ~aiken/ publications/ trs/ FLProject. pdf
210
Os anos 90 - linguagens multiparadigma
Dylan
Dylan
Paradigma Multiparadigma
Surgido em Incio dos anos 1990s
Criado por Apple Computer
Estilo de tipagem: dinmica, forte
Compiladores Open Dylan
Influenciada por ALGOL, Scheme
Influenciou Ruby
Dylan uma linguagem de programao Multiparadigma criada pela Apple Computer.
Histria
A Linguagem DYLAN foi criada nos anos 90 pela Apple Computer, nome vem da juno de DYNAMIC
LANGUAGE (Linguagem Dinmica), para ser implementada ao projeto Newton MessagePad da Apple. Pode-se
utilizar programao funcional (clculos matemticos) e orientada objeto Porm o projeto no atingiu maturidade
suficiente para ser implementado no prazo e em 1995 a Apple substitui DYLAN por uma mistura de C e
NewtonScript em seu tablet. A Apple acabou disponibilizando uma verso da linguagem para uso livre, alm do
manual de refrencia do Dylan escrito por (David Moon e Orca Starbcuk). A partir desse momento, a Harlequin
(Empresa de Software) lanou uma IDE Dylan comercial para Microsoft Windows e Carnegie Mellon University
lanou um compilador de cdigo aberto para o sistema Unix. Aps o fechamento e diviso da Harlequin, surgiu uma
comunidade forte de cdigo aberto em 2003, responsvel por reviver o Dylan, elaborando o projeto e compilador
Opendylan, disponvel no site http:/ / opendylan. org.
Exemplos de cdigo
Hello world
module: hello
format-out("Hello, world\n");
Bibliografia
Feinberg, Neal; Keene, Sonya E.; Mathews, Robert O.; Withington, P. Tucker. Dylan Programming.
Massachusetts:Addison Wesley, 1997.412 p. ISBN 0-201-47976-1
Dylan
211
Ligaes externas
Manual de referncia (http:/ / www. opendylan. org/ books/ drm/ )
Tutorial (http:/ / www. opendylan. org/ gdref/ tutorial/ )
Haskell
Haskell
Paradigma funcional, no rgida, modular
Surgido em 1990
Criado por
Simon Peyton-Jones, Paul Hudak,
[1]
Philip Wadler, et al.
Estilo de tipagem: forte, esttica, inferida
Compiladores GHC, Hugs, nhc
Dialetos: Helium, O'Haskell, Template Haskell, PolyP
Influenciada por Miranda, ML
Influenciou C, Cat, Clojure, F, Python, Scala
Haskell uma linguagem de programao puramente funcional, de propsito geral, nomeada em homenagem ao
lgico Haskell Curry. Como uma linguagem funcional, a estrutura de controle primria a funo; a linguagem
baseada nas observaes de Haskell Curry
[2]
e seus descendentes intelectuais.
[3]
Seu ltimo padro semi-oficial o
Haskell 98, destinado a especificar uma verso mnima e portvel da linguagem para o ensino e como base para
futuras extenses.
Histria
O conceito de avaliao preguiosa j estava difundido no meio acadmico desde o final da dcada de 1970.
Esforos nessa rea incluam tcnicas de reduo de grafo e a possibilidade de uma mudana radical na arquitetura
de von Neumann.
[4]
Aps o lanamento de Miranda em 1985, diversas outras linguagens funcionais de semntica
no rgida proliferaram, como Lazy ML, Orwell, Alfl, Id, Clean, Ponder e Daisy (um dialeto de Lisp). Mesmo aps
dois anos, Miranda ainda era a mais usada, mas no estava em domnio pblico.
Em setembro 1987 foi realizada uma conferncia Functional Programming Languages and Computer Architecture
(FPCA '87), em Oregon, o consenso foi a criao de um comit com o objetivo de construir um padro aberto para
tais linguagens.
[5]
Isso consolidaria as linguagens existentes, servindo como base para pesquisas futuras no
desenvolvimento de linguagens. A primeira reunio do comit foi realizada em janeiro de 1988, e algumas das metas
da linguagem foram discutidas. A linguagem deveria ser de fcil ensino, deveria ser completamente descrita atravs
de uma sintaxe e semntica formal, deveria estar disponvel livremente.
A primeira verso de Haskell foi definida em 1 de abril de 1990. Seguiu-se a verso 1.1 em agosto de ano seguinte, a
verso 1.2 em maro de 1992, a verso 1.3 em maio de 1996 e a verso 1.4 em abril de 1997.
[6]
Esforos posteriores
culminaram no Haskell 98, publicado em janeiro de 1999 e que especifica uma verso mnima, estvel e portvel da
linguagem e a biblioteca para ensino. Esse padro sofreu uma reviso em janeiro de 2003.
Haskell
212
A linguagem continua evoluindo, sendo as implementaes Hugs e GHC consideradas os padres de facto. A partir
de 2006 comeou o processo de definio de um sucessor do padro 98, conhecido informalmente por Haskell
("Haskell Prime").
Caractersticas
Caractersticas do Haskell incluem o suporte a funes recursivas e tipos de dados, casamento de padres, list
comprehensions, guard statements e avaliao preguiosa, esta, um elo em comum entre os diversos grupos de
desenvolvimento da linguagem.
[7]
A combinao destas caractersticas pode fazer com que a construo de funes
que seriam complexas em uma linguagem procedimental de programao tornem-se uma tarefa quase trivial em
Haskell. Segundo dados de 2002, a linguagem funcional sobre a qual mais pesquisa est sendo realizada. Muitas
variantes tem sido desenvolvidas: verses paralelizveis do MIT e Glasgow, ambas chamadas Parallel Haskell,
outras verses paralelas e distribudas chamadas Distributed Haskell (anteriormente Goffin) e Eden, uma verso
chamada Eager Haskell e vrias verses orientadas a objetos: Haskell++, O'Haskell e Mondrian.
Uma verso educacional do Haskell chamada Gofer foi desenvolvida por Mark Jones. Ela oferecida pelo HUGS.
Existe tambm uma verso do Haskell que permite orientao a aspectos (POA), chamada AspectH.
Sintaxe
Em Haskell existem apenas funes, e todas as funes so unrias. O que, em outras linguagens de programao
seriam funes binrias, ternrias, etc, em Haskell so funes cujo valor de retorno so outras funes - o que se
chama currying, termo derivado de Haskell Curry.
Uma funo que, dados dois nmeros, retorna sua soma poderia ser declarada como:
soma x y =x+y
O que parece ser uma funo binria , logicamente, uma funo unria (soma, cuja entrada x) que retorna outra
funo. Em outras palavras, soma x a funo unria que, dado y retorna x + y, e soma a funo unria que, dado
x, retorna x +.
Em Haskell no existem variveis globais, apenas funes e variveis locais, definidas dentro do escopo de cada
funo.
Tambm no h estruturas de loop, ou instrues do tipo goto.
O if implementado atravs de |, que significa a restrio do domnio do argumento da funo.
O exemplo abaixo mostra uma implementao do fatorial que usa a recursividade e o if:
fat 0 = 1
fat n | n > 0 = n*fat(n-1)
Em palavras: a primeira linha diz que o fatorial de zero um; a segunda linha diz que o fatorial de um nmero n
qualquer, desde que n seja maior que zero, pode ser calculado a partir do fatorial de (n-1). Esta implementao no
eficiente, mas serve como exemplo didtico.
Listas
H duas funcionalidades importantes para a construo de listas. A primeira a list comprehension, que permite
construir listas sob forma de conjuntos. Por exemplo, o cdigo [ x | x <- [0..], x^2>3 ] cria uma lista
de elementos x a partir do gerador <- [0..] (o conjunto dos nmeros naturais), que atendam o predicado
x^2>3 (o smbolo <- representa o pertence, , da teoria dos conjuntos). Pode-se combinar geradores numa mesma
list comprehension.
Haskell
213
A segunda funcionalidade a sequncia aritmtica, que permite construir listas sob forma de intervalos. Por
exemplo, o cdigo [2..10] cria uma lista de inteiros de 2 a 10. Pode-se omitir o fim do intervalo; [2..] gera
uma lista infinita de inteiros a partir de 2.
H trs funes primordiais sobre listas em Haskell, das quais outras funes podem ser combinadas.
[8]
A primeira
foldl, que adiciona um operador dado entre cada elemento da lista, retornando o resultado da expresso gerada.
Para concatenar uma lista de cadeias de caracteres cadeia = ["Uma", " ", "cadeia"] pode-se usar
foldr1 (++) cadeia. A segunda map, que executa uma funo a todos os elementos da lista, retornando uma
nova lista. A terceira filter, que filtra a lista a partir de um predicado.
Tipos de dado
A tipagem de Haskell forte. Cada expresso possui um tipo, e possvel obt-lo em tempo de compilao atravs
de inferncia de tipo. Os tipos bsicos da linguagem incluem:
Tipo de
dado
Descrio Classes Exemplo da sintaxe
Bool Enumerao de valores booleanos, que permitem certas operaes
lgicas, como conjuno (&&), disjuno (||) e negao (not).
Read, Show,
Eq, Ord, Enum,
Bounded
True
False
Char Enumerao de caracteres 16-bit, Unicode. A faixa dos primeiro 128
caracteres idntica ao ASCII.
Read, Show,
Eq, Ord, Enum,
and Bounded
'a'
Double Ponto flutuante com maior intervalo e preciso que Float RealFloat
Either Eq, Ord, Read,
Show
Float Ponto flutuante RealFloat 6553.612
321.6e-3
IO Tipo abstrato para operaes de E/S, como putStr, print, getChar,
getLine e readIO.
Monad, Functor
IOError Tipo abstrato para erros nas operaes de E/S com IO. Show, Eq
Int Inteiro que cobre, pelo menos, o intervalo de valores [-2^29, 2^29 - 1]. Integral 123
Integer Inteiro de preciso ilimitada, com as mesmas funes e operadores de
Int
Integral 123
Maybe Lida com valores opcionais ou ilegais sem terminar o programa e sem
usar o IOError de IO.
Eq, Ord, Read,
Show
Ordering Eq, Ord,
Bounded,
Enum, Read,
Show
String Cadeia de caracteres, representada sob forma de lista de Char. A sintaxe
tanto pode ser de lista quanto a abreviao, entre aspas.
"Texto"
['T','e','x','t','o']
Tuplas
Tipo de dado algbrico de definio de registros heterogneos, tuplas. A
quantidade mxima de elementos depende da implementao, mas a
quantidade mnima de quinze elementos sempre garantida.
[9]
Eq, Ord,
Bounded, Read,
Show
('A',11,True)
Listas Tipo de dado algbrico de definio de registros homogneos listas. Entre
os operadores disponveis encontra-se !!, que retorna o n-simo
elemento da lista, e ++, que concatena duas listas distintas de mesmo tipo.
Relacionado a concatenao, h o operador :, que adiciona um elemento
no topo de uma lista.
Eq, Ord [1,2,3,4]
[1..4]
(1:(2:(3:(4:[]))))
Haskell
214
A linguagem ainda define diversas classes padro:
Tipo de dado Descrio Prove
Bounded Delimita um tipo de dado
Enum Prove operaes em tipo sequencialmente ordenados. succ, pred, toEnum, enumFrom
Eq Prove operadores de igualdade. ==, /=
Floating
Fractional
Functor Usado por tipos que podem ser mapeados.
Integral
Ord Prove operadores de ordenao. , <, >=, >
Monad Prove operaes sobre mnadas.
MonadPlus
Num
Read
Real
RealFloat
RealFrac
Show
Operadores
Alm dos operadores especficos de certos tipos de dado supracitados, vale notar tambm alguns outros. O operador
. realiza a composio de funes. Por exemplo, a expresso ((2+).(3*).(4-)) 2 retorna 8, e significa
.
A potenciao pode ser feita atravs do operador **. Entretanto esto disponveis tambm duas verses mais
eficientes. Para ^^, o expoente deve ser um inteiro; para ^, o expoente deve ser um inteiro no negativo.
Aplicaes
Os pontos fortes da linguagem Haskell tm sido bem aplicados em alguns projetos. cada vez mais utilizada em
aplicaes comerciais. O compilador e interpretador Pugs criado por Audrey Tang uma verso completa da
linguagem Perl 6. Darcs um sistema de controle de verses baseado em mudanas (change-based) com vrias
caractersticas inovadoras. A Linspire GNU / Linux escolheu Haskell para desenvolvimento das ferramentas do
sistema . Xmonad um gerenciador de janelas "tile-based" para o X Window System escrito inteiramente em
Haskell. Bluespec SystemVerilog uma linguagem feita como uma extenso do Haskell.
Haskell
215
Exemplos
O difundido caso do Programa Ol Mundo pode ser exemplificado em Haskell da seguinte forma:
olamundo :: IO()
olamundo = putStrLn "Ol, Mundo!"
A clssica definio da funo fatorial:
fatorial :: Integer -> Integer
fatorial 0 = 1
fatorial n | n > 0 = n * fatorial (n-1)
Ou em uma linha:
fatorial n = if n > 0 then n * fatorial (n-1) else 1
Este artigo descreve o fatorial como uma funo recursiva, terminando com um caso que serve como base.
semelhante ao encontrado nas descries de fatoriais em livros didticos de matemtica. Grande parte do cdigo
Haskell semelhante ao padro da notao matemtica na potencialidade expressiva e na sintaxe. A primeira linha
da funo fatorial descreve os tipos desta funo; embora seja opcional, considerado bom estilo
[10]
inclu-la. Ela
pode ser lida como a funo fatorial (fatorial) tem tipo (::) inteiro para inteiro (Integer -> Integer). Ou seja, ele tem
um inteiro como um argumento e retorna outro inteiro. O tipo de uma definio inferido automaticamente se o
programador no forneceu uma notao de tipo.
A segunda linha depende de um casamento de padres (pattern matching), uma caracterstica importante do Haskell.
Note que os parmetros da funo so separados por parnteses e no por espaos. Quando o argumento da funo
0 (zero) ser devolvido o inteiro 1 (um). Para todos os outros casos, a terceira linha tentada. Esta a recursividade,
e executa a funo novamente at que um caso que sirva como base seja atingido.
Um "guard" protege a terceira linha de nmeros negativos, sendo que um fatorial no permite nmeros negativos,
indefinido-o. Sem um "guard" essa funo seria recursiva "fatorando" todos os nmeros negativos, sem nunca chegar
base 0. Se um inteiro negativo passado para o fatorial funcionar como um argumento, o programa ir falhar com
um erro "runtime". De ltimo caso, poderia ser tratada esta condio de erro e imprimir uma mensagem de erro
adequada em seu lugar.
A descrio acima parecida com as descries matemtica, tais como definies de uma funo e no
como uma atribuio de um valor numrico para uma varivel.
Uma outra definio da funo fatorial (usando uma notao de lista em Haskell e a funo padro product):
fatorial n = product [1..n]
A mesma funo mas agora no estilo point-free. Repare-se que os argumentos desaparecem (o ponto significa
composio de funes):
fatorial = product . enumFromTo 1
Uma implementao da funo que retorna o n-simo termo na seqncia de Fibonacci:
fib 0 = 0
fib 1 = 1
fib n = fib (n - 2) + fib (n - 1)
Uma funo que retorna uma lista dos nmeros de Fibonacci:
fibs@(_:rest) = 0 : 1 : (zipWith (+) fibs rest)
Haskell
216
A funo anterior cria uma lista infinita, que possvel graas a avaliao preguiosa. Poderia-se implementar fib
como:
fib n = fibs !! n
O algoritmo quicksort pode ser elegantemente escrito em Haskell:
qsort [] = []
qsort (h:t) = qsort menores_que_h ++ [h] ++ qsort maiores_que_h
where
menores_que_h = [x | x <- t, x < h]
maiores_que_h = [x | x <- t, x >= h]
Uma forma mais compacta desse mesmo algoritmo seria:
quicksort [] = []
quicksort (s:xs) = quicksort [x|x <- xs,x < s] ++ [s] ++ quicksort [x|x <- xs,x >= s]
Nota: Por causa das excessivas cpias e concatenaes de listas, este cdigo pode ser lento.
Aqui tem um exemplo de Nmeros Perfeitos:
divisor x d | mod(x d)==0=n
| otherwise=0
soma_d _ 1 =1
soma_d 1 _ =1
soma_d n x = divisor(n x)+soma_d(n-1 x)
NP 0 _ = []
NP n x |soma_d(x/2 x)== x=(x:NP(n-1 x+1)
|otherwise=NP(n x+1)
Implementaes
As seguintes implementaes esto totalmente, ou quase, de acordo com o padro Haskell 98. Todas so distribudas
sob licenas cdigo aberto.
GHC. O Glasgow Haskell Compiler gera cdigo nativo de diferentes arquitecturas e pode tambm gerar cdigo C.
Ele provavelmente o mais popular compilador Haskell, e algumas bibliotecas (como bindings para OpenGL)
funcionam apenas com ele.
Hugs um interpretador de bytecode. Oferece rpida compilao dos programas e razovel velocidade de
execuo. Tambm dispe de uma simples biblioteca grfica. Hugs ideal para pessoas que esto aprendendo os
bsicos de Haskell. a mais portvel e leve das implementaes de Haskell.
nhc98 outro compilador que gera bytecode. O bytecode resultante executa significativamente mais rpido do
que o equivalente do Hugs. Nhc98 foca na minimizao do uso de memria, e uma boa escolha para mquinas
velhas/lentas.
HBC outro compilador Haskell para cdigo nativo. Seu desenvolvimento no est ativo, mas ele funcional.
Helium um novo dialecto do Haskell. O foco na facilidade de aprendizado. Actualmente carece de typeclasses,
tornando-o incompatvel com muitos programas Haskell.
Haskell
217
Leitura adicional
Pgina do livro: Haskell: Uma Abordagem Prtica
[11]
, um livro de nvel introdutrio a mdio sobre a linguagem
Haskell, com uma apresentao crescente as principais caractersticas da linguagem.
[1] Stio de Paul Hudak (http:/ / www. cs.yale. edu/ homes/ hudak-paul/ )
[2] [2] , with 2 sections by William Craig, see paragraph 9E
[3] De Bruijn, Nicolaas (1968), Automath, a language for mathematics, Department of Mathematics, Eindhoven University of Technology,
TH-report 68-WSK-05. Reprinted in revised form, with two pages commentary, in: Automation and Reasoning, vol 2, Classical papers on
computational logic 1967-1970, Springer Verlag, 1983, pp. 159-200.
[4] [4] Hudak 2007, p. 2
[5] [5] Hudak 2007, p. 3
[6] [6] Hudak 2007, p. 5
[7] [7] Hudak 2007, p. 8
[8] [8] Du Bois
[9] [9] The Haskell 98 Report, s. 6.1.4
[10] HaskellWiki: Type signatures as good style (http:/ / www. haskell. org/ haskellwiki/ Type_signatures_as_good_style)
[11] http:/ / www2.joinville. udesc.br/ ~coca/ index.php/ Main/ PaginaDoLivroDeHaskell
Referncias bibliogrficas
Naomi Hamilton (19 de setembro de 2008). The A-Z of Programming Languages: Haskell (http:/ / www.
computerworld. com. au/ index. php/ id;1974033854;fp;;fpid;;pf;1) (em ingls). Computerworld. Pgina visitada
em 29 de setembro de 2008.
Paul Hudak, John Hughes, Simon Peyton Jones, Philip Wadler (16 de abril de 2007). A History of Haskell: Being
Lazy With Class (http:/ / research. microsoft. com/ ~simonpj/ papers/ history-of-haskell/ history. pdf) (em ingls).
Third ACM SIGPLAN History of Programming Languages Conference (HOPL-III). Pgina visitada em 29 de
setembro de 2008.
Andr Rauber Du Bois. Programao Funcional com a Linguagem Haskell (http:/ / www. macs. hw. ac. uk/
~dubois/ ProgramacaoHaskell. pdf) (em ingls). Universidade de Heriot-Watt. Pgina visitada em 30 de setembro
de 2008.
The Haskell 98 Report: Predefined Types and Classes (http:/ / www. haskell. org/ onlinereport/ basic. html) (em
ingls). Stio oficial (Dezembro de 2002). Pgina visitada em 30 de setembro de 2008.
Ligaes externas
Pgina oficial (http:/ / www. haskell. org) (em ingls)
Introduo ao Haskell 98 (http:/ / www. haskell. org/ tutorial/ haskell-98-tutorial. pdf) (em ingls)
Outros exemplos de cdigos em Haskell (http:/ / www. ntecs. de/ old-hp/ uu9r/ lang/ html/ haskell. en. html) (em
ingls)
Tutorial, em http:/ / www. lisperati. com/ haskell/ (http:/ / www. lisperati. com/ haskell/ ) (em ingls)
Python
218
Python
Python
Paradigma Multiparadigma:
Orientao a objetos
Programao imperativa
Programao funcional
Surgido em 1991
ltima verso 3.3.3 (19 de novembro de 2013)
Verso em teste 3.4.0b3 (26 de janeiro de 2014)
Criado por Guido van Rossum
Estilo de tipagem: Dinmica, forte
Dialetos: CPython, IronPython, Jython, PyPy
Influenciada por ABC, ALGOL 68, C, Haskell, Icon, Java, Lisp, Modula-3, Perl, Smalltalk
Influenciou Boo, D, Falcon, Fantom, Groovy, JavaScript, Nimrod, Py, Ruby, Squirrel
Pgina oficial
www.python.org
[1]
Python uma linguagem de programao de alto nvel, interpretada, imperativa, orientada a objetos, funcional, de
tipagem dinmica e forte. Foi lanada por Guido van Rossum em 1991. Atualmente possui um modelo de
desenvolvimento comunitrio, aberto e gerenciado pela organizao sem fins lucrativos Python Software
Foundation. Apesar de vrias partes da linguagem possurem padres e especificaes formais, a linguagem como
um todo no formalmente especificada. O padro de facto a implementao CPython.
A linguagem foi projetada com a filosofia de enfatizar a importncia do esforo do programador sobre o esforo
computacional. Prioriza a legibilidade do cdigo sobre a velocidade ou expressividade. Combina uma sintaxe
concisa e clara com os recursos poderosos de sua biblioteca padro e por mdulos e frameworks desenvolvidos por
terceiros.
O nome Python teve a sua origem no grupo humorstico britnico Monty Python, criador do programa Monty
Python's Flying Circus, embora muitas pessoas faam associao com o rptil do mesmo nome (em portugus, pton
ou pito).
Python
219
Histria
Guido van Rossum, So Francisco, Califrnia
Python foi concebido no final de 1989 por Guido van
Rossum no Instituto de Pesquisa Nacional para
Matemtica e Cincia da Computao (CWI), nos
Pases Baixos, como um sucessor da ABC capaz de
tratar excees e prover interface com o sistema
operacional Amoeba atravs de scripts. Tambm da
CWI, a linguagem ABC era mais produtiva que C,
ainda que com o custo do desempenho em tempo de
execuo. Mas ela no possua funcionalidades
importantes para a interao com o sistema
operacional, uma necessidade do grupo. Um dos focos
primordiais de Python era aumentar a produtividade do
programador.
Em 1991, Guido publicou o cdigo (nomeado verso 0.9.0) no grupo de discusso alt.sources. Nessa verso j
estavam presentes classes com herana, tratamento de excees, funes e os tipos de dado nativos list, dict,
str, e assim por diante. Tambm estava presente nessa verso um sistema de mdulos emprestado do Modula-3. O
modelo de excees tambm lembrava muito o do Modula-3, com a adio da opo else clause. Em 1994 foi
formado o principal frum de discusso do Python, comp.lang.python, um marco para o crescimento da base de
usurios da linguagem.
A verso 1.0 foi lanada em janeiro de 1994. Novas funcionalidades incluam ferramentas para programao
funcional como lambda, map, filter e reduce. A ltima verso enquanto Guido estava na CWI foi o Python
1.2. Em 1995, ele continuou o trabalho no CNRI em Reston, Estados Unidos, de onde lanou diversas verses. Na
verso 1.4 a linguagem ganhou parmetros nomeados (a capacidade de passar parmetro pelo nome e no pela
posio na lista de parmetros) e suporte nativo a nmeros complexos, assim como uma forma de encapsulamento.
Ainda na CNRI, Guido lanou a iniciativa Computer Programming for Everybody (CP4E; literalmente,
"Programao de Computadores para Todos"), que visava tornar a programao mais acessvel, um projeto
financiado pela DARPA. Atualmente o CP4E encontra-se inativo.
Em 2000, o time de desenvolvimento da linguagem se mudou para a BeOpen a fim de formar o time PythonLabs. A
CNRI pediu que a verso 1.6 fosse lanada, para marcar o fim de desenvolvimento da linguagem naquele local. O
nico lanamento na BeOpen foi o Python 2.0, e aps o lanamento o grupo de desenvolvedores da PythonLabs
agrupou-se na Digital Creations.
Python 2.0 implementou list comprehension, uma relevante funcionalidade de linguagens funcionais como SETL e
Haskell. A sintaxe da linguagem para essa construo bastante similar a de Haskell, exceto pela preferncia do
Haskell por caracteres de pontuao e da preferncia do python por palavras reservadas alfabticas. Essa verso 2.0
tambm introduziu um sistema coletor de lixo capaz de identificar e tratar ciclos de referncias.
J o 1.6 incluiu uma licena CNRI substancialmente mais longa que a licena CWI que estavam usando nas verses
anteriores. Entre outras mudanas, essa licena inclua uma clusula atestando que a licena era governada pelas leis
da Virgnia. A Free Software Foundation alegou que isso era incompatvel com a GNU GPL. Tanto BeOpen quanto
CNRI e FSF negociaram uma mudana na licena livre do Python que o tornaria compatvel com a GPL. Python
1.6.1 idntico ao 1.6.0, exceto por pequenas correes de falhas e uma licena nova, compatvel com a GPL.
Python 2.1 era parecido com as verses 1.6.1 e 2.0. Sua licena foi renomeada para Python Software Foundation
License. Todo cdigo, documentao e especificao desde o lanamento da verso alfa da 2.1 propriedade da
Python Software Foundation (PSF), uma organizao sem fins lucrativos fundada em 2001, um modelo tal qual da
Apache Software Foundation. O lanamento incluiu a mudana na especificao para suportar escopo aninhado,
Python
220
assim como outras linguagens com escopo esttico. Esta funcionalidade estava desativada por padro, e somente foi
requerida na verso 2.2.
Uma grande inovao da verso 2.2 foi a unificao dos tipos Python (escritos em C) e classes (escritas em Python)
em somente uma hierarquia. Isto tornou o modelo de objetos do Python consistentemente orientado a objeto.
Tambm foi adicionado generator, inspirado em Icon.
O incremento da biblioteca padro e as escolhas sintticas foram fortemente influenciadas por Java em alguns casos:
o pacote logging introduzido na verso 2.3, o analisador sinttico SAX, introduzido na verso 2.0 e a sintaxe de
decoradores que usa @, adicionadas na verso 2.4.
Em 1 de outubro de 2008 foi lanada a verso 2.6, j visando a transio para a verso 3.0 da linguagem. Entre
outras modificaes, foram includas bibliotecas para multiprocessamento, JSON e E/S, alm de uma nova forma de
formatao de cadeias de caracteres.
Atualmente a linguagem usada em diversas reas, como servidores de aplicao e computao grfica. Est
disponvel como linguagem de script em aplicaes como OpenOffice (Python UNO Bridge), Blender e pode ser
utilizada em procedimentos armazenados no sistema gerenciador de banco de dados PostgreSQL (PL/Python).
A terceira verso da linguagem foi lanada em dezembro de 2008, chamada Python 3.0 ou Python 3000. Com
noticiado desde antes de seu lanamento, houve quebra de compatibilidade com a famlia 2.x para corrigir falhas que
foram descobertas neste padro, e para limpar os excessos das verses anteriores. A primeira verso alfa foi lanada
em 31 de agosto de 2007, a segunda em 7 de dezembro do mesmo ano.
Mudanas da verso incluem a alterao da palavra reservada print, que passa a ser uma funo, tornando mais
fcil a utilizao de uma verso alternativa da rotina. Em Python 2.6, isso j est disponvel ao adicionar o cdigo
from __future__ import print_function. Tambm, a mudana para Unicode de todas as cadeias de
caracteres.
Filosofia
Parte da cultura da linguagem gira ao redor de The Zen of Python, um poema que faz parte do documento "PEP 20
(The Zen of Python)", escrito pelo programador em Python de longa data Tim Peters, descrevendo sumariamente a
filosofia do Python. Pode-se v-lo atravs de um easter egg do Python pelo comando:
>>> import this
Caractersticas
Construes
Construes de Python incluem: estrutura de seleo (if, else, elif); estrutura de repetio (for, while),
que itera por um container, capturando cada elemento em uma varivel local dada; construo de classes (class);
construo de subrotinas (def); construo de escopo (with), como por exemplo para adquirir um recurso.
Tipos de dado
A tipagem de Python forte, pois os valores e objetos tm tipos bem definidos e no sofrem coeres como em C ou
Perl. So disponibilizados diversos tipos de dados nativos:
Python
221
Tipo de dado Descrio Exemplo da sintaxe
str, unicode Uma cadeia de caracteres imutvel 'Wikipedia', u'Wikipedia'
list Lista heterognea mutvel [4.0, 'string', True]
tuple Tupla imutvel (4.0, 'string', True)
set,
frozenset
Conjunto no ordenado, no contm elementos duplicados set([4.0, 'string', True])
frozenset([4.0, 'string',
True])
dict conjunto associativo {'key1': 1.0, 'key2':
False}
int Nmero de preciso fixa, transparentemente convertido para long caso
no caiba em um int.
42
2147483648L
float Ponto flutuante 3.1415927
complex Nmero complexo 3+2j
bool Booleano True ou False
Python tambm permite a definio dos tipos de dados prprios, atravs de classes. Instncias so construdas
invocando a classe (FooClass()), e as classes so instncia da classe type, o que permite metaprogramao e
reflexo. Mtodos so definidos como funes anexadas classe, e a sintaxe
instncia.mtodo(argumento) um atalho para Classe.mtodo(instncia, argumento). Os
mtodos devem referenciar explicitamente a referncia para o objeto incluindo o parmetro self como o primeiro
argumento do mtodo.
Antes da verso 3.0, Python possua dois tipos de classes: "old-style" e "new-style". Classes old-style foram
eliminadas no Python 3.0, e todas so new-style. Em verses entre 2.2 e 3.0, ambos tipos de classes podiam ser
usadas. A sintaxe de ambos estilos a mesma, a diferena acaba sendo de onde objeto da classe herdado, direta ou
indiretamente (todas classes new-style herdam de object e so instancias de type). As classes new-styles nada mais
so que tipos definidos pelo usurio.
Palavras reservadas
O Python 2.5.2 define as seguintes 31 palavras reservadas:
and del from not while
as elif global or with
assert else if pass yield
break except import print
class exec in raise
continue finally is return
def for lambda try
Operadores
Os operadores bsicos de comparao como ==, <, >=, entre outros so usados em todos os
tipos de dados, como nmeros, cadeias de texto, listas e mapeamentos.
Comparaes em cadeia como a < b < c possuem o mesmo significado bsico que na
matemtica: os termos so comparadas na ordem. garantido que o processamento
da expresso lgica ir terminar to cedo o veredito claro, o princpio da
avaliao mnima. Usando a expresso anterior, se a < b falso, c no
avaliado.
Python
222
Quanto aos operadores lgicos, at Python 2.2 no havia o tipo de dado booleano. Em todas as verses da linguagem
os operadores lgicos tratam "", 0, None, 0.0, [] e {} como falso, enquanto o restante tratado como
verdadeiro de modo geral. Na verso 2.2.1 as constantes True e False foram adicionadas (subclasses de 1 e 0
respectivamente). A comparao binria retorna uma das duas constantes acima.
Os operadores booleanos and e or tambm seguem a avaliao mnima. Por exemplo, y == 0 or x/y >
100 nunca lanar a exceo de diviso por zero.
Interpretador interativo
O interpretador interativo uma caracterstica diferencial da linguagem, porque h a possibilidade de testar o cdigo
de um programa e receber o resultado em tempo real, antes de iniciar a compilao ou inclu-las nos programas. Por
exemplo:
>>> 1+1
2
>>>
>>> a = 1+1
>>> print a
2
>>> print(a)
2
>>>
Anlise lxica
Exemplo de script
No segundo captulo do Manual de
Referncia da Linguagem Python citado
que a anlise lxica uma anlise do
interpretador em si, os programas so lidos
por um analisador sinttico que divide o
cdigo em tokens.
Todo programa dividido em linhas lgicas
que so separadas pelo token NEWLINE ou NOVA LINHA, as linhas fsicas so trechos de cdigo divididos pelo
caractere ENTER. Linhas lgicas no podem ultrapassar linhas fsicas com exceo de juno de linhas, por
exemplo:
if resultado > 2 and \
1 <= 5 and \
2 < 5:
print ('Resultado: %f' % d)
ou
MESES_DO_ANO = ['janeiro', 'fevereiro', 'maro',
'abril', 'maio', 'junho',
'julho', 'agosto', 'setembro',
'outubro', 'novembro', 'dezembro']
Para a delimitao de blocos de cdigos os delimitadores so colocados em uma pilha e diferenciados por sua
indentao. Iniciando a pilha com valor 0 (zero) e colocando valores maiores que os anteriores na pilha. Para cada
Python
223
comeo de linha, o nvel de indentao comparado com o valor do topo da pilha. Se o nmero da linha for igual ao
topo da pilha, a pilha no alterada. Se o valor for maior a pilha recebe o nvel de indentao da linha e o nome
INDENT (empilhamento) se o nvel de indentao for menor, ento desempilhado at chegar a um nvel de
indentao recebendo o nome DEDENT (desempilhamento) e se no encontrar nenhum valor gerado um erro de
indentao.
Abaixo um exemplo de permutao, retirado do captulo 2.1 sobre Estrutura de linhas na Anlise lxica do Manual
de Referncia da linguagem (Language Reference Manual):
def perm(l): NOVA LINHA
INDENT if len(l) <= 1: NOVA LINHA
INDENT return[1] NOVA LINHA
DEDENT r = [ ] NOVA LINHA
for i in range(len(l)): NOVA LINHA
INDENT s = l[:i] + l[i+1:] NOVA LINHA
p = perm(s) NOVA LINHA
DEDENT for x in p: NOVA LINHA
INDENT r.append(l[i:i+1]+x) NOVA LINHA
DEDENT return r
Indentao
Python foi desenvolvido para ser uma linguagem de fcil leitura, com um visual agradvel, frequentemente usando
palavras e no pontuaes como em outras linguagens. Para a separao de blocos de cdigo, a linguagem usa
espaos em branco e indentao ao invs de delimitadores visuais como chaves (C, Java) ou palavras (BASIC,
Fortran, Pascal). Diferente de linguagens com delimitadores visuais de blocos, em Python a indentao obrigatria.
O aumento da indentao indica o incio de um novo bloco, que termina da diminuio da indentao.
Usando um editor de texto comum muito fcil existir erros de indentao, o recomendado configurar o editor
conforme a anlise lxica do Python ou utilizar uma IDE. Todas as IDE que suportam a linguagem fazem indentao
automaticamente.
Exemplo:
Indentao correta
def valor1():
while True:
try:
c = int(raw_input('Primeiro Valor: '))
return c
except ValueError:
print 'Invlido!'
Indentao incorreta
def valor1():
while True:
try:
c = int(raw_input('Primeiro Valor: '))
return c
except ValueError:
print 'Invlido!'
O cdigo est correto para os dois exemplos, mas o analisador lxico verificar se a indentao est coerente. O
analisador reconhecer as palavras reservadas while, def, try, except, return, print e as cadeias de
caracteres entre aspas simples e a indentao, e se no houver problemas o programa executar normalmente, seno
apresentar a exceo: "Seu programa est com erro no bloco de indentao".
Python
224
Compilador de bytecode
A linguagem de altssimo nvel, como j dito, mas ela tambm pode compilar seus programas para que a prxima
vez que o executar no precise compilar novamente o programa, reduzindo o tempo de carga na execuo.
Utilizando o interpretador interativo no necessrio a criao do arquivo de Python compilado, os comandos so
executados interativamente. Porm quando um programa ou um mdulo evocado, o interpretador realiza a anlise
lxica e sinttica, compila o cdigo de alto nvel se necessrio e o executa na mquina virtual da linguagem.
O bytecode armazenado em arquivos com extenso .pyc ou .pyo, este ltimo no caso de bytecode otimizado.
Interessante notar que o bytecode da linguagem tambm de alto nvel, ou seja, mais legvel aos seres humanos
que o cdigo de byte do C, por exemplo. Para descompilar um cdigo de byte utilizado o mdulo dis da
biblioteca padro da linguagem e existem mdulos de terceiros que tornam o bytecode mais confuso, tornando a
descompilao ineficaz.
Normalmente, o Python trabalha com dois grupos de arquivos:
1. Os mdulos do ncleo da linguagem, sua biblioteca padro e os mdulos independentes, criados pelo usurio.
2. No ncleo do interpretador existe o analisador lxico, o analisador sinttico que utiliza Estruturas de Objetos
(tempo de execuo), o Compilador que aloca memria (tempo de execuo) e depois do Avaliador de cdigo
que modifica o estado atual do programa (tempo de execuo), mostrando resultado para o usurio.
Polimorfismo
O conceito de polimorfismo descreve como objetos podem ser manipulados e acessados usando atributos e
comportamentos em comum sem considerar sua classe especfica e indica a presena de late binding, permitindo
sobrecarga e determinao de tipos em tempo de execuo e verificao.
Muitas linguagens orientadas a objeto utilizam assinaturas de funo para determinar qual verso de um mtodo
sobrecarregado chamar. No entanto, as chamadas de funo em Python so universais ou genricas sem
determinao de tipo. Por isso, sobrecarga no suportada na linguagem.
Orientao a objetos
Python suporta a maioria das tcnicas da programao orientada a objeto. Qualquer objeto pode ser usado para
qualquer tipo, e o cdigo funcionar enquanto haja mtodos e atributos adequados. O conceito de objeto na
linguagem bastante abrangente: classes, funes, nmeros e mdulos so todos considerados objetos. Tambm h
suporte para metaclasses, polimorfismo, e herana (inclusive herana mltipla). H um suporte limitado para
variveis privadas.
Na verso 2.2 de Python foi introduzido um novo estilo de classes em que objetos e tipos foram unificados,
permitindo a especializao de tipos. J a partir da verso 2.3 foi introduzido um novo mtodo de resoluo de
ambiguidades para heranas mltiplas.
Uma classe definida com class nome:, e o cdigo seguinte a composio dos atributos. Todos os mtodos da
classe recebem uma referncia a uma instncia da prpria classe como seu primeiro argumento, e a conveno que
se chame este argumento self. Assim os mtodos so chamados objeto.mtodo(argumento1,
argumento2, ...) e so definidos iguais a uma funo, como mtodo(self, argumento1,
argumento2, ...). Veja que o parmetro self conter uma referncia para a
instncia da classe definida em objeto quando for efetuada esta chamada. Os
atributos da classe podem ser acessados em qualquer lugar da classe, e os
atributos de instncia (ou varivel de instncia) devem ser declarados dentro
dos mtodos utilizando a referncia instncia atual (self) (ver cdigo
contextualizado em anexo).
Python
225
Em Python no existe proteo dos membros duma classe ou instncia pelo interpretador, o chamado
encapsulamento. Convenciona-se que atributos com o nome comeando com um _ so de uso privado da classe, mas
no h um policiamento do interpretador contra acesso a estes atributos. Uma exceo so nomes comeando com
__, no caso em que o interpretador modifica o nome do atributo (ver cdigo contextualizado em anexo).
Python permite polimorfismo, que condiz com a reutilizao de cdigo. fato que funes semelhantes em vrias
partes do software sejam utilizadas vrias vezes, ento definimos esta funo como uma biblioteca e todas as outras
funes que precisarem desta a chamam sem a necessidade de reescrev-la (ver cdigo contextualizado em anexo).
Programao funcional
Uma das construes funcionais de Python compreenso de listas, uma forma de construir listas. Por exemplo,
pode-se usar a tcnica para calcular as cinco primeiras potncias de dois. O algoritmo quicksort tambm pode ser
expressado usando a mesma tcnica (ver cdigos contextualizados para ambos os casos em anexo).
Em Python, funes so objetos de primeira classe que podem ser criados e armazenados dinamicamente. O suporte
funes annimas est na construo lambda (clculo Lambda). No h disponibilidade de funes annimas de
fato, pois os lambdas contm somente expresses e no blocos de cdigo.
Python tambm suporta clausuras lxicas desde a verso 2.2 (ver cdigos contextualizados para ambos os casos em
anexo). J geradores foram introduzidos na verso 2.2 e finalizados na verso 2.3, e representam o mecanismo de
Python para a avaliao preguiosa de funes (ver cdigos contextualizados para ambos os casos em anexo).
Tratamento de excees
Python suporta e faz uso constante de tratamento de excees como uma forma de testar condies de erro e outros
eventos inesperados no programa. inclusive possvel capturar uma exceo causada por um erro de sintaxe. O
estilo da linguagem apia o uso de excees sempre que uma condio de erro pode aparecer. Por exemplo, ao invs
de testar a disponibilidade de acesso a um recurso, a conveno simplesmente tentar usar o recurso e capturar a
exceo caso o acesso seja rejeitado (recurso inexistente, permisso de acesso insuficiente, recurso j em uso, ...).
Excees so usadas frequentemente como uma estrutura de seleo, substituindo blocos if-else, especialmente
em situaes que envolvem threads. Uma conveno de codificao o EAFP, do ingls, " mais fcil pedir perdo
que permisso". Isso significa que em termos de desempenho prefervel capturar excees do que testar atributos
antes de os usar. Segue abaixo exemplos de cdigo que testam atributos ("pedem permisso") e que capturam
excees ("pedem perdo"):
Teste de atributo
if hasattr(spam, 'eggs'):
ham = spam.eggs
else:
handle_error()
Captura de exceo
try:
ham = spam.eggs
except AttributeError:
handle_error()
Ambos os cdigos produzem o mesmo efeito, mas h diferenas de desempenho. Quando spam possui o atributo
eggs, o cdigo que captura excees mais rpido. Caso contrrio, a captura da exceo representa uma perda
considervel de desempenho, e o cdigo que testa o atributo mais rpido. Na maioria dos casos o paradigma da
captura de excees mais rpido, e tambm pode evitar problemas de concorrncia. Por exemplo, num ambiente
multitarefa, o espao de tempo entre o teste do atributo e seu uso de fato pode invalidar o atributo, problema que no
acontece no caso da captura de excees.
Python
226
Biblioteca padro
Python possui uma grande biblioteca padro, geralmente citada como um dos maiores triunfos da linguagem,
fornecendo ferramentas para diversas tarefas. Recentemente, a biblioteca Boost do C++ incluiu uma biblioteca para
permitir a interoperabilidade entre as duas linguagens. Por conta da grande variedade de ferramentas fornecida pela
biblioteca padro, combinada com a a habilidade de usar linguagens de nvel mais baixo como C e C++, Python pode
ser poderosa para conectar componentes diversos de software.
A biblioteca padro conta com facilidades para escrever aplicaes para a Internet, contando com diversos formatos
e protocolos como MIME e HTTP. Tambm h mdulos para criar interfaces grficas, conectar em bancos de dados
relacionais e manipular expresses regulares.
Algumas partes da biblioteca so cobertas por especificaes (por exemplo, a implementao WSGI da wsgiref
segue o PEP 333), mas a maioria dos mdulos no segue.
Comentrios
Python fornece duas alternativas para documentar o cdigo. A primeira o uso de comentrios para indicar o que
certo cdigo faz. Comentrios comeam com # e so terminados pela quebra da linha. No h suporte para
comentrios que se estendem por mais de uma linha; cada linha consecutiva de comentrio deve indicar #. A
segunda alternativa o uso de cadeias de caractere, literais de texto inseridos no cdigo sem atribuio. Cadeias de
caracteres em Python so delimitadas por " ou ' para nica linha e por """ ou ''' para mltiplas linhas.
Entretanto, conveno usar o mtodos de mltiplas linhas em ambos os casos.
Diferente de comentrios, a cadeias de caracteres usadas como documentao so objetos Python e fazem parte do
cdigo interpretado. Isso significa que um programa pode acessar sua prpria documentao e manipular a
informao. H ferramentas que extraem automaticamente essa documentao para a gerao da documentao de
API a partir do cdigo. Documentao atravs de cadeias de caracteres tambm pode ser acessada a partir do
interpretador atravs da funo help().
Plataformas disponveis
A linguagem e seu interpretador esto disponveis para as mais diversas plataformas, desde Unix (Linux, FreeBSD,
Solaris, MacOS X, etc.), Windows, .NET, verses antigas de MacOS at consoles de jogos eletrnicos ou mesmo
alguns celulares, como a srie 60, N8xx(PyMaemo) da Nokia e palmtops.
Para algum sistema operacional no suportado, basta que exista um compilador C disponvel e gerar o Python a
partir do fonte. O cdigo fonte traduzido pelo interpretador para o formato bytecode, que multiplataforma e pode
ser executado e distribudo sem fonte original.
Implementaes
A implementao original e mais conhecida do Python o CPython, escrita em C e compatvel com o padro C89,
sendo distribuda com uma grande biblioteca padro escrita em um misto de Python e C. Esta implementao
suportada em diversas plataformas, incluindo Microsoft Windows e sistemas Unix-like modernos.
Stackless Python uma variao do CPython que implementa microthreads (permitindo multitarefa sem o uso de
threads), sendo suportada em quase todas as plataformas que a implementao original.
Existem tambm implementaes para plataformas j existentes: Jython para a Plataforma Java e IronPython para
.NET.
Em 2005 a Nokia lanou um interpretador Python para os telefones celulares S60, chamado PyS60. Essa verso
inclui vrios mdulos das implementaes tradicionais, mas tambm alguns mdulos adicionais para a integrao
com o sistema operacional Symbian. Uma implementao para Palm pode ser encontrada no Pippy. J o PyPy, a
Python
227
linguagem Python totalmente escrita em Python.
Diversas implementaes, como CPython, pode funcionar como um interpretador de comandos em que o usurio
executa as instrues sequencialmente, recebendo o resultado automaticamente. A execuo compilada do cdigo
oferece um ganho substancial em velocidade, com o custo da perda da interatividade.
Desenvolvimento
O desenvolvimento de Python conduzido amplamente atravs do processo Python Enhancement Proposal ("PEP"),
em portugus Proposta de Melhoria do Python. Os PEPs so documentos de projeto padronizados que fornecem
informaes gerais relacionadas ao Python, incluindo propostas, descries, justificativas de projeto (design
rationales) e explicaes para caractersticas da linguagem. PEPs pendentes so revisados e comentados por Van
Rossum, o Benevolent Dictator For Life (lder arquiteto da linguagem) do projeto Python. Desenvolvedores do
CPython tambm se comunicam atravs de uma lista de discusso, python-dev, que o frum principal para
discusso sobre o desenvolvimento da linguagem. Questes especficas so discutidas no gerenciador de erros
Roundup mantido em python.org. O desenvolvimento acontece no auto-hospedado svn.python.org
Licena
Python possui uma licena livre aprovada pela OSI e compatvel com a GPL, porm menos restritiva. Ela prev
(entre outras coisas) que binrios da linguagem sejam distribudos sem a necessidade de fornecer o cdigo fonte
junto.
Mdulos e frameworks
Ao longo do tempo tm sido desenvolvidos pela comunidade de programadores muitas bibliotecas de funes
especializadas (mdulos) que permitem expandir as capacidades base da linguagem. Entre estes mdulos
especializados destacam-se:
Descrio Campos de atuao
Django Framework para desenvolvimento gil de aplicaes web; desenvolvimento web
Pylons Framework para desenvolvimento de aplicaes web; desenvolvimento web
TurboGears Framework baseado em vrias outras tecnologias existentes no mundo que
gira em torno da linguagem Python;
desenvolvimento web
Matplotlib - Matplotlib
/ Pylab
biblioteca para manipulao de grficos 2D; processamento de imagem
Python Imaging Library biblioteca para manipulao de imagens digitais; processamento de imagem
PyOpenGL - Python
OpenGL Binding
suporte multiplataforma ao OpenGL; computao grfica
Pygame Conjunto de mdulos para o desenvolvimento de jogos eletrnicos,
incluindo grficos SDL;
desenvolvimento de jogos
eletrnicos; computao grfica
Twisted Framework para o desenvolvimento de aplicaes de rede. Inclui mdulos
para servidor web, de aplicao, SSH e diversos outros protocolos;
desenvolvimento de software;
desenvolvimento web
PYRO - Python Remote
Objects
Framework para o desenvolvimento de sistemas distribudos; computao distribuda
ZODB Sistema de persistncia e banco de dados orientado a objetos; banco de dados
Plone SGC - Sistema de gerenciamento de contedo; desenvolvimento web
CherryPy Framework para aplicaes web; desenvolvimento web
Python
228
Web2py Framework para aplicaes web; desenvolvimento web
Visual Python Framework 3D de alto nvel; computao grfica
SQLObject Mapeador objeto-relacional: traduz estruturas relacionais para objetos
Python e manipula o banco de dados de forma transparente;
banco de dados
Numarray Mdulo para manipulao de vetores e computao cientfica. computao cientfica
Interfaces grficas
Exemplos de bibliotecas de GUI disponveis para Python incluem:
Descrio
Etk interface para a biblioteca EFL
PyGTK interface para a biblioteca GTK
PyQT interface para a biblioteca QT
Tkinter Mdulo padro para GUI no Python
wxPython interface para a biblioteca wxWidgets
Wax Construdo para simplificar o uso do wxPython
Ambientes de desenvolvimento integrado
Existem vrios ambientes de desenvolvimento integrado (IDE) disponveis para Python:
Desenvolvedor ltima verso Platforma Toolkit Licena
Boa Constructor Team 0.6.1 Independente wxPython GPL
Eric Python IDE Detlev Offenbach 4.1.2 Independente Qt GPL
Geany Team 1.23 Independente GTK2 GPL
IDLE Guido van Rossum et
al.
3.0 / 2008 Independente Tkinter PSFL
IronPython Studio Clarius Labs 1.0 / 10 de dezembro de
2007
Windows VS2008 Shell
Runtime
Microsoft Public
License
Komodo ActiveState 4.1.1 / junho de 2007 multiplataforma Plataforma Mozilla Propretrio
PyDev (Eclipse) Fabio Zadrozny 1.3.13 multiplataforma SWT EPL
PythonCard Alex Tweedly 0.8.2 multiplataforma wxPython Licena BSD
PyScripter mmm-experts 1.7.2 / outubro de 2006 Windows MIT
Stani's Python
Editor
Stani 0.8.4c / 14 de fevereiro de
2008
Independente wxPython GPL
Wing IDE Wingware 3.0.2-1 / 27 de novembro
de 2007
Windows, Linux, OS
X
PyGTK Propretrio
Python
229
Aplicaes
Alguns dos maiores projetos que utilizam Python so o servidor de aplicao Zope, o compartilhador de arquivos
Mnet, o stio YouTube e o cliente original do BitTorrent. Grandes organizaes que usam a linguagem incluem
Google (parte dos crawlers), Yahoo! (para o stio de grupos de usurios) e NASA. O sistema de gerenciamento de
reservas da Air Canada tambm usa Python em alguns de seus componentes. A linguagem tambm tem bastante uso
na indstria da segurana da informao.
A linguagem tem sido embarcada como linguagem de script em diversos softwares, como em programas de edio
tridimensional como Maya, Autodesk Softimage, TrueSpace e Blender. Programas de edio de imagem tambm a
usam para scripts, como o GIMP. Para diversos sistema operacionais a linguagem j um componente padro,
estando disponvel em diversas distribuies Linux. O Red Hat Linux usa Python para instalao, configurao e
gerenciamento de pacotes.
Outros exemplos incluem o Plone, sistema de gerenciamento de contedo desenvolvido em Python e Zope e a
Industrial Light & Magic, que produz filmes da srie Star Wars usando extensivamente Python para a computao
grfica nos processos de produo dos filmes.
[1] http:/ / www. python.org/
Bibliografia
Pilgrim, Mark. Dive into Python (http:/ / diveintopython. net) (em ingls). 2ed. Nova Iorque:Apress, 2004.413
p. ISBN 978-1-5905-9356-1
Pilgrim, Mark. Dive into Python 3 (http:/ / www. diveinto. org/ python3/ ) (em ingls). 2ed. Nova Iorque:Apress,
2009.360 p. ISBN 978-1-4302-2415-0
Menezes, Nilo Ney Coutinho. Introduo Programao com Python. So Paulo:Novatec, 2010.224 p. ISBN
978-85-7522-250-8 (Ideal para quem nunca teve contato com programao)
Downey, Allen B.. Think Python (http:/ / shop. oreilly. com/ product/ 0636920025696. do) (em ingls).
Sebastopol (Califrnia):O'Reilly, 2012.300 p. ISBN 978-1-4493-3072-9
Lutz, Mark. Learning Python (http:/ / shop. oreilly. com/ product/ 0636920028154. do) (em ingls). 5ed.
Sebastopol (Califrnia):O'Reilly, 2013.1600 p. ISBN 978-1-4493-5573-9
Lutz, Mark. Programming Python (http:/ / shop. oreilly. com/ product/ 9780596158118. do) (em ingls). 4ed.
Sebastopol (Califrnia):O'Reilly, 2010.1632 p. ISBN 978-0-596-15810-1
David Beazley e Brian K. Jones. Python Cookbook (http:/ / shop. oreilly. com/ product/ 0636920027072. do) (em
ingls). 3ed. Sebastopol (Califrnia):O'Reilly, 2013.706 p. ISBN 978-1-4493-4037-7
Ligaes externas
Pgina oficial (http:/ / www. python. org/ ) (em ingls)
Wiki da comunidade brasileira de usurios (http:/ / www. python. org. br/ )
Site da comunidade portuguesa de usurios (http:/ / python. pt/ )
Python (http:/ / www. dmoz. org/ Computers/ Programming/ Languages/ Python/ ) no Open Directory Project
Gdel
230
Gdel
Gdel
Paradigma lgico, declarativo
Surgido em 1992
ltima verso 1.5 (11/8/1995)
Criado por John Lloyd & Patricia Hill
Estilo de tipagem: forte
Gdel um linguagem de programao declarativa, de propsito geral que adere ao paradigma lgico. uma
linguagem fortemente tipada, o sistema de tipos baseado em muitos ordenados da lgica com polimorfismo
paramtrico. Seu nome uma homenagem ao lgico Kurt Gdel.
Caractersticas
Gdel tem um sistema de mdulos, e suporta inteiros de preciso arbitrria, racionais de preciso arbitrria, e
tambm nmeros de ponto flutuante. Pode resolver restries sobre domnios finitos de inteiros e tambm restries
racionais lineares. Ele suporta o processamento de conjuntos finitos. Ele tambm tem uma regra de computao
flexvel e um operador de poda que generaliza a consignao (em ingls: commit) das linguagens de programao
lgica concorrente.
As instalaes meta-lgicas da linguagem Gdel fornecem suporte para meta-programas que fazem anlise,
transformao, compilao, verificao e depurao, entre outras tarefas.
Cdigo de exemplo
O mdulo de Gdel que se segue uma especificao do maior divisor comum (mdc) de dois nmeros. Pretende-se
demonstrar a natureza declarativa de Gdel, e no, o ser particularmente eficaz. O predicado CommonDivisor diz
que se i e j no so zero, ento d um divisor comum de i e j se situa entre 1 e os menores entre i e j e
divide ambos i e j exatamente. O predicado Mdc diz que d um mximo divisor comum de i e j se for um
divisor comum de i e j, e no h e que tambm um divisor comum de i e j e maior do que d.
MODULE MDC.
IMPORT Integers.
PREDICATE Mdc : Integer * Integer * Integer.
Mdc(i,j,d)
CommonDivisor(i,j,d) &
~ SOME [e] (CommonDivisor(i,j,e) & e > d).
PREDICATE CommonDivisor : Integer * Integer * Integer.
CommonDivisor(i,j,d)
IF (i = 0 \/ j = 0) THEN
d = Max(Abs(i),Abs(j))
ELSE
1 =< d =< Min(Abs(i),Abs(j)) &
i Mod d = 0 &
j Mod d = 0.
Gdel
231
Bibliografia
Hill, Patricia; Lloyd, John. The Gdel Programming Language (em ingls). Cambridge:The MIT Press,
1994.350 p. ISBN 0-262-08229-2
Ligaes externas
Pgina oficial
[1]
(em ingls)
Referncias
[1] http:/ / www. scs. leeds. ac.uk/ hill/ GOEDEL/ expgoedel. html
Lua
Lua
Paradigma Abstrao de dados
Programao imperativa
Programao procedural
Surgido em 1993
ltima verso 5.2.2 (27 de maro de 2013)
Criado por Roberto Ierusalimschy, Luiz Henrique de Figueiredo, Waldemar Celes
Estilo de tipagem: Fraca, Dinmica, Implcita
Dialetos:
Metalua
[1]
Influenciada por Icon, Pascal, Scheme
Influenciou Dao, Io, Squirrel
Licena: Licena MIT
Pgina oficial
www.lua.org
[2]
Lua uma linguagem de script imperativa, procedural, pequena, reflexiva e leve, projetada para expandir aplicaes
em geral, por ser uma linguagem extensvel (que une partes de um programa feitas em mais de uma linguagem), para
prototipagem e para ser embarcada em softwares complexos, como jogos . Assemelha-se com Python, Ruby e Icon,
entre outras.
Lua foi criada por um time de desenvolvedores do Tecgraf
[3]
da PUC-Rio, a princpio, para ser usada em um projeto
da Petrobras. Devido sua eficincia, clareza e facilidade de aprendizado, passou a ser usada em diversos ramos da
programao, como no desenvolvimento de jogos (a Blizzard Entertainment, por exemplo, usou a linguagem no jogo
World of Warcraft), controle de robs, processamento de texto, etc. Tambm frequentemente usada como uma
linguagem de propsito geral.
Lua
232
Lua combina programao procedural com poderosas construes para descrio de dados, baseadas em tabelas
associativas e semntica extensvel. tipada dinamicamente, interpretada a partir de bytecodes, e tem gerenciamento
automtico de memria com coleta de lixo. Essas caractersticas fazem de Lua uma linguagem ideal para
configurao, automao (scripting) e prototipagem rpida.
Histria
Lua foi criada em 1993 por Roberto Ierusalimschy, Luiz Henrique de Figueiredo e Waldemar Celes, membros do
Computer Graphics Technology Group na PUC-Rio, a Pontifcia Universidade Catlica do Rio de Janeiro, no Brasil.
Verses de Lua antes da verso 5.0 foram liberadas sob uma licena similar licena BSD. A partir da verso 5.0,
Lua foi licenciada sob a licena MIT.
Alguns de seus parentes mais prximos so o Icon, por sua concepo, e Python, por sua facilidade de utilizao por
no-programadores. Em um artigo publicado no Dr. Dobb's Journal, os criadores de Lua tambm afirmam que Lisp
e Scheme foram uma grande influncia na deciso de desenvolver a tabela como a principal estrutura de dados de
Lua. Lua tem sido usada em vrias aplicaes, tanto comerciais como no-comerciais.
O primeiro projeto utilizando a linguagem em jogos foi em 1997 quando a LucasArts a utilizou como linguagem de
script no jogo Grim Fandango.
Caractersticas
Lua normalmente descrita como uma linguagem de mltiplos paradigmas, oferecendo um pequeno conjunto de
caractersticas gerais que podem ser estendidas para encaixar diferentes tipos de problemas, em vez de fornecer uma
especificao mais complexa e rgida para combinar com um nico paradigma. Lua, por exemplo, no contm apoio
explcito herana, mas permite que ela seja executada com relativa facilidade com metatables. Do mesmo modo,
Lua permite que programadores quando implementam nomes, classes, e outras funes, empreguem poderosas
tcnicas de programao funcional e completos escopos lexicais.
Lua uma linguagem que suporta apenas um pequeno nmero de estruturas, tais como dados atmicos, valores
booleanos, nmeros (dupla preciso em ponto flutuante por padro), e strings. As estruturas de dados comuns, tais
como matrizes, conjuntos, tabelas, listas, e registros podem ser representados por meio de Lua. Lua no foi
construda com suporte para programao orientada a objeto.
Exemplos
O Programa Ol Mundo pode ser escrito da seguinte forma:
print "Ol, Mundo!"
A funo fatorial recursiva:
function fact(n)
if n == 0 then
return 1
else
return n * fact(n - 1)
end
end
O clculo dos n primeiros nmeros perfeitos:
function perfeitos(n)
cont=0
Lua
233
x=0
print('Os numeros perfeitos sao ')
repeat
x=x+1
soma=0
for i=1,(x-1) do
if math.mod(x,i)==0 then soma=soma+i;
end
end
if soma == x then
print(x)
cont = cont+1
end
until cont==n
print('Pressione qualquer tecla para finalizar...')
end
O tratamento das funes como variveis de primeira classe mostrado no exemplo a seguir, onde o comportamento
da funo print modificado:
do
local oldprint = print -- Grava a varivel print em oldprint
print = function(s) -- Redefine a funo print
if s == "foo" then
oldprint("bar")
else
oldprint(s)
end
end
end
Qualquer chamada da funo print agora ser executada atravs da nova funo, e graas ao escopo lxico de Lua,
a funo print antiga s ser acessvel pelo nova.
Lua tambm suporta funes closure, como demonstrado abaixo:
function makeaddfunc(x) -- Retorna uma nova funo que adiciona x ao
argumento
return function(y)
return x + y
end
end
plustwo = makeaddfunc(2)
print(plustwo(5)) -- Prints 7
Um novo closure criado para a varivel x cada vez que a funo makeaddfunc chamada, de modo que a
funo annima a ser retornada sempre ir acessar seu prprio parmetro x. O closure gerenciado pelo coletor de
lixo (garbage collector) da linguagem, tal como qualquer outro objeto.
Uma caracterstica essencial de Lua a semntica Extensvel, e o conceito de metatables permite que as tabelas
Lua sejam personalizadas em poderosas e exclusivas formas. O exemplo a seguir mostra uma tabela infinita. Para
Lua
234
qualquer valor n, fibs [n] dar o ensimo nmero Fibonacci usando programao dinmica.
fibs = { 1, 1 } -- Valores iniciais de fibs[1] e fibs[2].
setmetatable(fibs, {
__index = function(name, n) -- Funo chamada se fibs[n] no existir
name[n] = name[n - 1] + name[n - 2] -- Calcula e grava fibs[n].
return name[n]
end
})
Tabelas
As tabelas so as estruturas de dados mais importantes (e, por concepo, a nica estrutura de dados complexas) em
Lua, e so a base de todos os tipos de usurio criada.
A tabela um conjunto de chaves e pares de dados (tambm conhecido como hashed heterogeneous associative
array), onde os dados so referenciados por chave. A chave (ndice) pode ser de qualquer tipo de dados exceto nulo.
Um inteiro com chave valor 1 considerada distinta da chave de uma string "1".
As tabelas so criadas usando a seguinte sintaxe: {}
a_table = {} -- Creates a new, empty table
Tabelas sempre so passadas por referncia:
a_table = {x = 10} -- Creates a new table, with one associated entry.
The string x mapping to the number 10.
print(a_table["x"]) -- Prints the value associated with the string key,
in this case 10.
b_table = a_table
a_table["x"] = 20 -- The value in the table has been changed to 20.
print(a_table["x"]) -- Prints 20.
print(b_table["x"]) -- Prints 20, because a_table and b_table both
refer to the same table.
Tabelas como estrutura
As tabelas so freqentemente utilizadas como estruturas (ou objetos), utilizando strings como chaves, porque este
tipo de uso muito comum, e Lua apresenta uma sintaxe especial para acessar esses tipos de domnios. Exemplo:
point = { x = 10, y = 20 } -- Create new table
print(point["x"]) -- Prints 10
print(point.x) -- Has exactly the same meaning as line above
Tabela como matriz
Atravs da utilizao de uma tecla numrica, a tabela lembra um tipo de dados de matriz. So de base 1, o primeiro
ndice 1 em vez de 0 como para muitas linguagens de programao. Exemplo de strings de uma simples matriz:
array = { "a", "b", "c", "d" } -- Indices are assigned automatically.
print(array[2]) -- Prints "b". Automatic indexing in Lua
starts at 1.
print(#array) -- Prints 4. # is the length operator
for tables and strings.
Lua
235
array[0] = "z" -- Zero is a legal index.
print(#array) -- Still prints 4, as Lua arrays are
1-based.
Exemplo de um vetor de objetos:
function Point(x, y) -- "Point" object constructor
return { x = x, y = y } -- Creates and returns a new object (table)
end
array = { Point(10, 20), Point(30, 40), Point(50, 60) } -- Creates
array of points
print(array[2].y) -- Prints 40
Projetos que utilizam Lua
Em 2013, a Wikimedia Foundation comeou a utilizar a linguagem nas predefinies.
Projetos
Adobe Photoshop Lightroom
Celestia
Cheat Engine
ClanLib
CryEngine 3
Corona SDK
Damn Small Linux
Ginga
Kepler (software)
lighttpd
Liquid Feedback
MinGW
Monotone
Nmap
PlayStation Home
Jogos
Exemplos de empresas que desenvolvem jogos usando a linguagem Lua: LucasArts, BioWare, Microsoft, Relic
Entertainment, Absolute Studios, Monkeystone Games, Blizzard.
Angry Birds
Baldur's Gate
The Battle for Wesnoth
Civilization V
Escape from Monkey Island
Fable II
Far Cry
FlyFF
Freeciv
Freelancer
Grim Fandango
Lua
236
Impossible Creatures
Lego Universe
MapleStory
MDK2
Monopoly Tycoon
Multi Theft Auto
Psychonauts
Ragnarok Online
Roblox
Tibia
World of Warcraft
Bibliografia
Ierusalimschy, Roberto; Figueiredo, Luiz Henrique de; Celes, Waldemar. Lua Reference manual. Rio de
Janeiro:Lua.org, 2006.103 p. ISBN 85-903798-3-3
Ierusalimschy, Roberto. Programming in Lua. Rio de Janeiro:Lua.org, 2006.252 p. ISBN 85-903798-2-5
Jung, Kurt; Brown, Aaron. Beginning Lua Programming. Indianapolis:Wiley Publishing, 2007.644 p. ISBN
0-470-06917-2
[1] http:/ / metalua.luaforge. net/
[2] http:/ / www. lua. org/
[3] http:/ / www. tecgraf. puc-rio.br
Ligaes externas
Pgina oficial (http:/ / www. lua. org/ ) (em ingls)
Pgina oficial (http:/ / www. lua. org/ portugues. html) (em portugus)
Manual de Referncia de Lua 5.1 (http:/ / www. lua. org/ manual/ 5. 1/ pt/ ) (em portugus)
Demonstrao online (http:/ / www. lua. org/ cgi-bin/ demo) (em ingls)
Lua Wiki (http:/ / lua-users. org/ wiki) (em ingls) - Wiki oficial
LuaForge - hospedagem e catlogo de projetos que usam Lua (http:/ / luaforge. net/ ) (em ingls)
Lua (http:/ / www. dmoz. org/ Computers/ Programming/ Languages/ Lua/ ) no Open Directory Project
Java
237
Java
Java
Duke, o mascote do Java
Paradigma Orientao a objetos, estruturada, imperativa
Surgido em 1995
ltima verso 1.7.5 (12 de junho de 2012)
Criado por James Gosling e Sun Microsystems
Estilo de tipagem: esttica, forte
Compiladores GCJ, Javac
Influenciada por Ada 83, C++, C, Eiffel, Generic Java, Mesa, Modula-3, Object Pascal, Objective-C, UCSD Pascal, Smalltalk
Influenciou Ada 2005, BeanShell, C, Clojure, D, ECMAScript, Fantom, Groovy, J#, JavaScript, PHP, Python, Scala
Licena: GNU General Public License/Java Community Process
Pgina oficial
www.oracle.com/technetwork/java/index.html
[1]
Java uma linguagem de programao orientada a objeto desenvolvida na dcada de 90 por uma equipe de
programadores chefiada por James Gosling, na empresa Sun Microsystems. Diferentemente das linguagens
convencionais, que so compiladas para cdigo nativo, a linguagem Java compilada para um bytecode que
executado por uma mquina virtual. A linguagem de programao Java a linguagem convencional da Plataforma
Java, mas no sua nica linguagem.
Histria
Em 1991, na Sun Microsystems, foi iniciado o Green Project, o bero do Java, uma linguagem de programao
orientada a objetos. Os mentores do projeto eram Patrick Naughton, Mike Sheridan, e James Gosling. Eles
acreditavam que, em algum tempo, haveria uma convergncia dos computadores com os equipamentos e
eletrodomsticos comumente usados pelas pessoas no seu dia-a-dia.
Para provar a viabilidade desta ideia, 13 pessoas trabalharam arduamente durante 18 meses. No vero de 1992 eles
emergiram de um escritrio de Sand Hill Road, no Menlo Park, com uma demonstrao funcional da ideia inicial. O
prottipo se chamava *7 (l-se StarSeven), um controle remoto com uma interface grfica touchscreen. Para o *7,
foi criado um mascote, hoje amplamente conhecido no mundo Java, o Duke. O trabalho do Duke no *7 era ser um
guia virtual ajudando e ensinando o usurio a utilizar o equipamento. O *7 tinha a habilidade de controlar diversos
dispositivos e aplicaes. James Gosling especificou uma nova linguagem de programao para o *7. Gosling
decidiu batiz-la de Oak, que quer dizer carvalho, uma rvore que ele podia observar quando olhava atravs da sua
janela.
Java
238
O prximo passo era encontrar um mercado para o *7. A equipe achava que uma boa ideia seria controlar televises
e vdeo por demanda com o equipamento. Eles construram uma demonstrao chamada de MovieWood, mas
infelizmente era muito cedo para que o vdeo por demanda bem como as empresas de TV a cabo pudessem viabilizar
o negcio. A ideia que o *7 tentava vender, hoje j realidade em programas interativos e tambm na televiso
digital. Permitir ao telespectador interagir com a emissora e com a programao em uma grande rede de cabos, era
algo muito visionrio e estava muito longe do que as empresas de TV a cabo tinham capacidade de entender e
comprar. A ideia certa, na poca errada.
Entretanto, o estouro da internet aconteceu e rapidamente uma grande rede interativa estava se estabelecendo. Era
este tipo de rede interativa que a equipe do *7 estava tentando vender para as empresas de TV a cabo. E, da noite
para o dia, no era mais necessrio construir a infraestrutura para a rede, ela simplesmente estava l. Gosling foi
incumbido de adaptar o Oak para a internet e em janeiro 1995 foi lanada uma nova verso do Oak que foi
rebatizada para Java. A tecnologia Java tinha sido projetada para se mover por meio das redes de dispositivos
heterogneos, redes como a internet. Agora aplicaes poderiam ser executadas dentro dos navegadores nos Applets
Java e tudo seria disponibilizado pela internet instantaneamente. Foi o esttico HTML dos navegadores que
promoveu a rpida disseminao da dinmica tecnologia Java. A velocidade dos acontecimentos seguintes foi
assustadora, o nmero de usurios cresceu rapidamente, grandes fornecedores de tecnologia, como a IBM
anunciaram suporte para a tecnologia Java.
Desde seu lanamento, em maio de 1995, a plataforma Java foi adotada mais rapidamente do que qualquer outra
linguagem de programao na histria da computao. Em 2004 Java atingiu a marca de 3 milhes de
desenvolvedores em todo mundo. Java continuou crescendo e hoje uma referncia no mercado de desenvolvimento
de software. Java tornou-se popular pelo seu uso na internet e hoje possui seu ambiente de execuo presente em
navegadores, mainframes, sistemas operacionais, celulares, palmtops, cartes inteligentes etc.
Padronizao
Em 1997 a Sun Microsystems tentou submeter a linguagem a padronizao pelos rgos ISO/IEC e ECMA, mas
acabou desistindo.
[2][3][4]
Java ainda um padro de fato, que controlada atravs da JCP Java Community
Process.
[5]
Em 13 de novembro de 2006, a Sun lanou a maior parte do Java como Software Livre sob os termos da
GNU General Public License (GPL). Em 8 de maio de 2007 a Sun finalizou o processo, tornando praticamente todo
o cdigo Java como software de cdigo aberto, menos uma pequena poro da qual a Sun no possui copyright.
[6]
Caractersticas
A linguagem Java foi projetada tendo em vista os seguintes objetivos:
Orientao a objetos - Baseado no modelo de Simular
Portabilidade - Independncia de plataforma - "escreva uma vez, execute em qualquer lugar" ("write once, run
anywhere")
Recursos de Rede - Possui extensa biblioteca de rotinas que facilitam a cooperao com protocolos TCP/IP, como
HTTP e FTP
Segurana - Pode executar programas via rede com restries de execuo
Alm disso, podem-se destacar outras vantagens apresentadas pela linguagem:
Sintaxe similar a C/C++
Facilidades de Internacionalizao - Suporta nativamente caracteres Unicode
Simplicidade na especificao, tanto da linguagem como do "ambiente" de execuo (JVM)
distribuda com um vasto conjunto de bibliotecas (ou APIs)
Possui facilidades para criao de programas distribudos e multitarefa (mltiplas linhas de execuo num mesmo
programa)
Java
239
Desalocao de memria automtica por processo de coletor de lixo
Carga Dinmica de Cdigo - Programas em Java so formados por uma coleo de classes armazenadas
independentemente e que podem ser carregadas no momento de utilizao
Licena
A Sun disponibiliza a maioria das distribuies Java gratuitamente e obtm receita com programas mais
especializados como o Java Enterprise System. Em 13 de novembro de 2006, a Sun liberou partes do Java como
software livre, sob a licena GNU General Public License. A liberao completa do cdigo fonte sob a GPL ocorreu
em maio de 2007.
Exemplos de cdigo
Mtodo main
O mtodo main onde o programa inicia. Pode estar presente em qualquer classe. Os parmetros de linha de
comando so enviados para o array de Strings chamado args.
public class OlaMundo {
/**
* Mtodo que executa o programa
* public = visto em qualquer lugar da aplicao. o modificador
de acesso
* static = iniciado automaticamente pela JVM, sem precisar de uma
instncia
* void = Mtodo sem retorno (retorno vazio)
* main = Nome do mtodo, que obrigatorio ser este. Recebe como
parmetro um array de String.
* String[] args = Array de argumentos que podem ser repassados na
chamada do programa.
*/
public static void main(String[] args) {
System.out.println("Ol, Mundo!"); //Imprime na tela a frase
}
}
Classes
Exemplo:
public abstract class Animal {
public abstract void fazerBarulho();
}
public class Cachorro extends Animal {
public void fazerBarulho() {
System.out.println("AuAu!");
}
}
public class Gato extends Animal {
Java
240
public void fazerBarulho() {
System.out.println("Miau!");
}
}
O exemplo acima cria a classe Animal e duas classes derivadas de Animal. importante observar que nas classes
derivadas temos a redefinio do mtodo fazerBarulho(). Esta redefinio classificada como uma sobreposio
(override) de mtodos. O conceito de sobreposio somente pode ser identificado e utilizado quando temos classes
dispostas em um relacionamento de herana.
Java no suporta herana mltipla, devido a possibilidade de uma classe pai ter um mtodo com o mesmo nome de
outra classe pai, e gerar possveis falhas ao chamar o mtodo, e todas as classes em Java derivam da classe Object. A
nica possibilidade de se ver herana mltipla em Java no uso de interfaces, pois uma classe pode implementar
vrias interfaces.
Classes internas
Java pode ter classes internas. Exemplos:
public class Cavalo extends Animal {
public void fazerBarulho() {
System.out.println("RIINCH!");
}
// Classe interna e privada. Existe s no contexto da classe
"Cavalo".
private class Parasita extends Animal {
public void fazerBarulho() {
System.out.println("SQRRT");
}
}
}
Interfaces
Uma interface modela um comportamento esperado. Pode-se entend-la como uma classe que contenha apenas
mtodos abstratos. Embora uma classe no possa conter mais de uma super classe, a classe pode implementar mais
de uma interface. Exemplo:
public interface Pesado {
double obterPeso();
}
public interface Colorido {
Color obterCor();
}
public class Porco extends Animal implements Pesado, Colorido {
public void fazerBarulho() {
System.out.println("inc!");
}
Java
241
// Implementao da interface Pesado
public double obterPeso() {
return 50.00;
}
// Implementao da interface Colorido
public Color obterCor() {
return Color.BLACK;
}
// Uma propriedade s do porco
public boolean enlameado() {
return true;
}
}
Objetos annimos
Podemos ter tambm objetos annimos, onde no necessrio instanciar o objeto em uma varivel para utiliz-lo.
Exemplo:
public class MostraBarulho {
public static void main(String args[]) {
new Cavalo().fazerBarulho(); // Objeto annimo.
// Abaixo um obj new Animal() {
public void fazerBarulho() {
System.out.println("QUAC!");
}
}.fazerBarulho();
}
}
Ferramentas
Frameworks
possvel utilizar frameworks para facilitar o desenvolvimento de aplicaes. Dentre os mais utilizados pode-se
destacar:
Hibernate ferramenta para ORM
Junit ferramenta para auxiliar na criao de testes unitrios
Log4j ferramenta para facilitar a criao de logs na aplicao
Spring ferramenta que auxilia principalmente implementao de injeo de dependncias e inverso de controle
Struts controlador MVC (Model 2) web
Java
242
Ambientes de desenvolvimento
possvel desenvolver aplicaes em Java atravs de vrios ambientes de desenvolvimento integrado (IDEs). Dentre
as opes mais utilizadas pode-se destacar:
BlueJ um ambiente desenvolvido por uma faculdade australiana (considerado muito bom para iniciantes)
JCreator (gratuito/shareware) um ambiente desenvolvido pela Xinox (recomendado para programadores
iniciantes)
jEdit (recomendado para programadores iniciantes)
Eclipse (recomendado para programadores fluentes)
Emulador do Android no Eclipse, exibindo um simples "Hello
World", escrito em JAVA e XML
IDEs completas (recomendado para programadores
profissionais)
Eclipse um projeto aberto iniciado pela IBM
IntelliJ IDEA (comercial) uma IDE desenvolvida
pela JetBrains
JBuilder um ambiente desenvolvido pela empresa
Borland
JDeveloper (gratuito OTN) uma IDE
desenvolvida pela empresa Oracle
NetBeans (software livre) uma IDE desenvolvida
pela Sun Microsystems
Outras IDEs (menos populares)
Gel (IDE) open source
Greenfoot bem parecido com o BlueJ
JGRASP bom para intermedirios, feito pela equipe do Projeto GRASP
Java Studio Creator/Enterprise (gratuito SDN) um ambiente criado pela empresa Sun Microsystems
Workshop for WebLogic (comercial/desenvolvedor) um ambiente criado pela empresa Oracle
WebSphere Studio Application Developer um ambiente criado pela empresa IBM
Extenses
Extenses em Java:
J2ME (Micro-Edition for PDAs and cellular phones)
J2SE (Standard Edition)
J3D (A high level API for 3D graphics programming)
JAAS (Java Authentication and Authorization Service)
JAIN (Java API for Integrated Networks)
Java Card
JMX (Java Management Extensions)
JavaFX
JSF (JavaServer Faces)
JSP (JavaServer Pages)
JavaSpaces
JCE (Java Cryptography Extension)
JDBC (Java Database Connectivity)
JDMK (Java Dynamic Management Kit)
JDO (Java Data Objects)
JEE (Enterprise Edition)
Java
243
Jini (a network architecture for the construction of distributed systems)
Jiro
JMF (Java Media Framework)
JMI (Java Metadata Interface)
JMS (Java Message Service)
JNDI (Java Naming and Directory Interface)
JNI (Java Native Interface)
JOGL (A low level API for 3D graphics programming, using OpenGL)
JSML (Java Speech API Markup Language)
JXTA (open source-based peer-to-peer infrastructure)
MARF (Modular Audio Recognition Framework)
OSGi (Dynamic Service Management and Remote Maintenance)
SuperWaba (JavaVMs for handhelds)
Certificaes
Existem 8 tipos de certificaes
[7]
da Sun Microsystems para Java:
Oracle Certified Enterprise Architect (OCEA)
Oracle Certified Mobile Application Developer (OCMAD)
Oracle Certified Developer For Java Web Services (OCDJWS)
Oracle Certified Business Component Developer (OCBCD)
Oracle Certified Web Component Developer (OCWCD)
Oracle Certified Java Developer (OCJD)
Oracle Certified Java Programmer (OCJP)
Oracle Certified Java Associate (OCJA)
Cada certificao testa algum tipo de habilidade dentro da plataforma e linguagem Java. Todos os testes so
realizados pela empresa Person VUE e so reconhecidos internacionalmente.
Comunidade
A comunidade de desenvolvedores Java rene-se em grupo denominados JUGs (Java User Groups). No Brasil o
movimento de grupos de usurios expandiu-se bastante e tem formado alguns dos maiores grupos de usurios Java
do mundo
[8]
, como por exemplo o PortalJava, GUJ e o JavaFree.
[1] http:/ / www. oracle. com/ technetwork/ java/ index.html
[2] Java Study Group (http:/ / www. open-std. org/ JTC1/ SC22/ JSG/ )
[3] Why Java Was - Not - Standardized Twice (http:/ / csdl2. computer. org/ comp/ proceedings/ hicss/ 2001/ 0981/ 05/ 09815015. pdf)
[4] What is ECMA--and why Microsoft cares (http:/ / techupdate. zdnet. com/ techupdate/ stories/ main/ 0,14179,2832719,00. html)
[5] Java Community Process website (http:/ / www. jcp.org/ en/ home/ index)
[6] open.itworld.com - JAVAONE: Sun - The bulk of Java is open sourced (http:/ / open. itworld. com/ 4915/ 070508opsjava/ page_1. html)
[7] Java Certification (http:/ / www.sun.com/ training/ certification/ java/ index. xml)
[8] Profissao Java - Pgina 13- Java no Brasil (http:/ / www. profissaojava. com. br/ arquivos/ ProfissaoJava-Abertura. pdf)
Java
244
Bibliografia
Harvey M. Deitel. Java: Como Programar. 6ed. So Paulo:Pearson education do Brasil, 2005.1097 p.
Apostila Java e Orientao a Objetos (http:/ / www. caelum. com. br/ apostila-java-orientacao-objetos/ ), licena
Creative Commons, 7 edio, pela Caelum - Ensino e Inovao.
Patrick Naughton, Dominando o Java, Guia Autorizado da Sun Microsystems, Editora Makron Books, 1997,
Osborne, ISBN 80025-75540
Brian Jepson, Java Database Programming Master Next Generation Web Database Techniques, 1997, Editora:
Wiley Computer Publishing, ISBN 0-471-16518-2
Ligaes externas
Pgina oficial (http:/ / www. oracle. com/ technetwork/ java/ index. html) (em ingls)
Pgina oficial (http:/ / www. oracle. com/ br/ technologies/ java/ index. html) (em portugus)
Tutoriais oficiais (http:/ / download. oracle. com/ javase/ tutorial/ ) (em ingls)
Java (http:/ / www. dmoz. org/ Computers/ Programming/ Languages/ Java/ ) no Open Directory Project
PHP
PHP
Paradigma procedural, reflexo, orientao a objetos, funcional
Surgido em 1995
ltima verso 5.5.11 (2 de abril de 2014)
Criado por Rasmus Lerdorf
Estilo de tipagem: dinmica
Compiladores Linguagem interpretada
Influenciada por C, C++, Perl, Java, Tcl
Pgina oficial
www.php.net
[1]
PHP (um acrnimo recursivo para "PHP: Hypertext Preprocessor", originalmente Personal Home Page) uma
linguagem interpretada livre, usada originalmente apenas para o desenvolvimento de aplicaes presentes e atuantes
no lado do servidor, capazes de gerar contedo dinmico na World Wide Web. Figura entre as primeiras linguagens
passveis de insero em documentos HTML, dispensando em muitos casos o uso de arquivos externos para
eventuais processamentos de dados. O cdigo interpretado no lado do servidor pelo mdulo PHP, que tambm gera
a pgina web a ser visualizada no lado do cliente. A linguagem evoluiu, passou a oferecer funcionalidades em linha
de comando, e alm disso, ganhou caractersticas adicionais, que possibilitaram usos adicionais do PHP, no
relacionados a web sites. possvel instalar o PHP na maioria dos sistemas operacionais, gratuitamente. Concorrente
direto da tecnologia ASP pertencente Microsoft, o PHP utilizado em aplicaes como o MediaWiki, Facebook,
Drupal, Joomla, WordPress, Magento e o Oscommerce.
Criado por Rasmus Lerdorf em 1995, o PHP tem a produo de sua implementao principal referncia formal da
linguagem, mantida por uma organizao chamada The PHP Group. O PHP software livre, licenciado sob a PHP
PHP
245
License, uma licena incompatvel com a GNU General Public License (GPL) devido a restries no uso do termo
PHP.
Histria
A linguagem surgiu em meados de 1994, como um pacote de programas CGI criados por Rasmus Lerdorf, com o
nome Personal Home Page Tools, para substituir um conjunto de scripts Perl que ele usava no desenvolvimento de
sua pgina pessoal. Em 1997 foi lanado o novo pacote da linguagem com o nome de PHP/FI, trazendo a ferramenta
Forms Interpreter, um interpretador de comandos SQL. Mais tarde, Zeev Suraski desenvolveu o analisador do PHP
3 que contava com o primeiro recurso de orientao a objetos, que dava poder de alcanar alguns pacotes, tinha
herana e dava aos desenvolvedores somente a possibilidade de implementar propriedades e mtodos.
[2][3]
Pouco
depois, Zeev e Andi Gutmans, escreveram o PHP 4, abandonando por completo o PHP 3, dando mais poder
mquina da linguagem e maior nmero de recursos de orientao a objetos. O problema srio que apresentou o PHP
4 foi a criao de cpias de objetos, pois a linguagem ainda no trabalhava com apontadores ou handlers, como so
as linguagens Java, Ruby e outras. O problema fora resolvido na verso atual do PHP, a verso 5, que j trabalha
com handlers. Caso se copie um objeto, na verdade copiaremos um apontador, pois, caso haja alguma mudana na
verso original do objeto, todas as outras tambm sofrem a alterao, o que no acontecia na PHP 4.
Trata-se de uma linguagem extremamente modularizada, o que a torna ideal para instalao e uso em servidores web.
Diversos mdulos so criados no repositrio de extenses PECL (PHP Extension Community Library) e alguns
destes mdulos so introduzidos como padro em novas verses da linguagem. muito parecida, em tipos de dados,
sintaxe e mesmo funes, com a linguagem C e com a C++. Pode ser, dependendo da configurao do servidor,
embarcada no cdigo HTML. Existem verses do PHP disponveis para os seguintes sistemas operacionais:
Windows, Linux, FreeBSD, Mac OS, OS/2, AS/400, Novell Netware, RISC OS, AIX, IRIX e Solaris.
Construir uma pgina dinmica baseada em bases de dados simples com PHP, (em parte, vale lembrar), este prov
suporte a um grande nmero de bases de dados: Oracle, Sybase, PostgreSQL, InterBase, MySQL, SQLite, MSSQL,
Firebird, etc., podendo abstrair o banco com a biblioteca ADOdb, entre outras. A Wikipdia funciona sobre um
software inteiramente escrito em PHP, usando bases de dados MySQL: o MediaWiki.
PHP tem suporte aos protocolos: IMAP, SNMP, NNTP, POP3, HTTP, LDAP, XML-RPC, SOAP. possvel abrir
sockets e interagir com outros protocolos. E as bibliotecas de terceiros expandem ainda mais estas funcionalidades.
Existem iniciativas para utilizar o PHP como linguagem de programao de sistemas fixos. A mais notvel a
PHP-GTK. Trata-se de um conjunto do PHP com a biblioteca GTK, portada do C++, fazendo assim softwares
inter-operacionais entre Windows e Linux. Na prtica, essa extenso tem sido muito pouco utilizada para projetos
reais.
Licena
PHP um software gratuito e de cdigo aberto publicado sob a PHP License, que afirma:
Produtos derivados deste software no devem ser chamado de PHP, nem pode conter "PHP" em seu nome,
sem prvia permisso por escrito da group@php.net. Voc pode indicar que o software funciona em conjunto
com o PHP, dizendo "Foo para PHP", em vez de cham-lo "PHP Foo" ou "phpfoo".
Esta restrio no uso do nome PHP o torna incompatvel com a GNU General Public License (GPL).
PHP
246
PHP 6 e Unicode
PHP recebeu diversas crticas por no ter suporte nativo a Unicode. Em 2005, um projeto liderado por Andrei
Zmievski foi iniciado para trazer esse dito suporte ao PHP atravs da incorporao da biblioteca International
Components for Unicode (ICU) para poder passar-se a usar a codificao UTF-16. Uma vez que isso causaria
grandes mudanas tanto no cdigo fonte como para o usurio, foi planejado lan-la na verso 6.0 em conjunto com
outros importantes recursos, ento em desenvolvimento, em vez da 5.5.
Entretanto, devido a falta de desenvolvedores que entendessem as mudanas necessrias e problemas de desempenho
decorrentes da converso para UTF-16, que raramente usado em um contexto web, levou a atrasos no projeto.
Como resultado, o PHP 5.3 foi lanado em 2009, sem total suporte ao Unicode, mas contendo algumas das
novidades que seriam lanadas no PHP 6.0. Em maro de 2010, o projeto em sua forma atual foi oficialmente
abandonado, e uma verso 5.4 do PHP foi feita ainda sem total suporte a Unicode, tambm contendo as novidades
que seriam lanadas no PHP 6.0. Esperanas iniciais eram de que um novo plano seria formado para ter a integrao
Unicode, mas a partir de 2014 nenhum foi adotado.
Durante os anos, antes do lanamento do PHP 5.3 e 5.4, alguns livros foram publicados com base no conjunto de
recursos esperado de PHP 6.0, incluindo o suporte a Unicode e os recursos que depois foram trazidos para outros
lanamentos. H, portanto, algum debate sobre se uma nova verso principal do PHP, com ou sem suporte a
Unicode, deve ser chamado de "PHP 6", ou se a nomenclatura deve ser ignorado para evitar confuso.
Histrico de verses
Legenda
Vermelho Verso no mais suportada
Verde Verso suportada
Azul Prximas verses
Verso
principal
Verso
intermediria
Data de
lanamento
Notas
1 1.0.0 1995-06-08 Oficialmente chamado de "Personal Home Page Tools (PHP Tools)" (Ferramentas para pgina
pessoal). Este foi o primeiro uso para o nome "PHP".
2 2.0.0 1997-11-01 Considerado pelo seu criador como a "mais rpida e simples ferramenta" para criar pginas dinmicas
para a Web.
3 3.0.0 1998-06-06 O desenvolvimento passou a ser feito por vrios desenvolvedores em colaborao. Zeev Suraski e
Andi Gutmans reescreveram toda a base do PHP nesta verso.
3.0.18 2000-10-20
ltima verso para do PHP 3.0.x. Unsupported Historical Releases
[4]
4 4.0.0 2000-05-22 Foi adicionado um melhor sistema de anlise sinttica (parser) chamado de motor Zend (Zend engine).
4.1.0 2001-12-10 Introduzidas as 'superglobais' ($_GET, $_POST, $_SESSION, etc.)
4.2.0 2002-04-22 A register_globals passou agora a estar desativada por padro. Dados recebidos via rede so
mais inseridos no escopo de varivel global, fechando possveis brechas de segurana.
4.3.0 2002-12-27 Introduziu sua interface de linha de comando (command-line interface - CLI), para complementar o
CGI.
4.4.0 2005-07-11 Adicionadas as pginas do manual para os script phpize e php-config.
4.4.9 2008-08-07 Melhorias na segurana e correo de bugs. ltima verso do PHP 4.4.x.
PHP
247
5 5.0.0 2004-07-13 Zend Engine II com um novo modelo de objeto.
5.1.0 2005-11-24 Melhorias na performance com a introduo de variveis de compilao na reengenharia do motor
PHP. Adicionada biblioteca PHP Data Objects (PDO) como uma nova interface de acesso aos bancos
de dados.
5.2.0 2006-11-02 Habilitado por padro o filtro de extenses. Suporte JSON nativo.
5.2.16 2010-12-16
ltima verso para a srie 5.2.
[5]
5.2.17 2011-01-06 Correo de vulnerabilidade crtica relacionada a ponto flutuante.
5.3.0 2009-06-30 Suporte a nomes de espao (namespace), Vinculao de nomes (late static bindings), rtulos de salto
de cdigo (goto limitado), clausura nativa, arquivos PHP nativos (phar), coletor de lixo para
referncias circulares, suporte Windows melhorado, sqlite3, mysqlnd em substituio a
libmysql como biblioteca de extenso de trabalho com MySQL, fileinfo em substituio ao
mime_magic para um melhor suporte MIME, extenso de internacionalizao, e descontinuidade da
extenso ereg/.
5.3.1 2009-11-19
Mais de 100 conrrees de problemas
[6]
, dentre eles algumas falhas de segurana.
5.3.2 2010-03-04 Grande nmero de correo de bugs.
5.3.3 2010-07-22 Principalmente correes de bugs e segurana; FPM SAPI.
5.3.4 2010-12-10 Principalmente correes de bugs e segurana; FPM SAPI melhorado.
5.3.5 2011-01-06 Conserto de erro crtico relacionado a ponto flutuante.
5.3.6 2011-03-10 Mais de 60 correes de bug reportados em verses anteriores.
5.3.7 2011-08-18 Esta verso focou-se na melhoria da estabilidade da srie PHP 5.3.x com mais de 90 correes de bug,
algumas relacionadas tambm segurana.
5.3.8 2011-08-23 Esta verso corrigiu dois problemas introduzidos na verso PHP 5.3.7.
5.3.9 2012-01-10 Esta verso focou-se na melhoria da estabilidade da srie PHP 5.3.x.
5.3.10 2012-02-02 Corrigida execuo remota arbitrria reportada por Stefan Esser, CVE-2012-0830.
5.3.13 2012-05-08 Corrigida vulnerabilidade nas instalaes utilizando CGI.
5.3.14 2012-06-06
bugs corrigidos
[7]
.
5.3.15 2012-07-19
bugs corrigidos
[8]
.
5.3.16 2012-08-16
bugs corrigidos
[9]
.
PHP
248
5.3.17 2012-09-13
bugs corrigidos
[10]
.
5.3.21 2013-01-17
bugs corrigidos
[11]
.
5.4.0 2012-03-01 Suporte Trait, suporte a uma verso mais curta na sintaxe de vetores. Items removidos:
register_globals, safe_mode, allow_call_time_pass_reference,
session_register(), session_unregister() and session_is_registered().
Servidor web embutido.. Vrias melhorias nas fucionalidades j existentes e na performance. Reduo
dos requerimentos de memria.
5.4.1 2012-04-26
correes de bugs
[12]
.
5.4.2 2012-05-03 Pacote de segurana para corrigir vulnerabilidade em chamadas PHP-CGI.
5.4.3 2012-05-08 Correo de vulnerabilidade relacionada s instalaes baseadas em CGI e correo em
vulnerabilidade de buffer overflow na funo apache_request_headers().
5.4.4 2012-06-06
correes de bugs
[13]
.
5.4.5 2012-07-19
correes de bugs
[14]
.
5.4.6 2012-08-16
correes de bugs
[15]
.
5.4.7 2012-09-13
correes de bugs
[16]
.
5.4.11 2013-01-17
correes de bugs
[17]
.
5.5.0 2013-06-20
correes de bugs
[18]
.
6 6.0.0 Sem data
prevista
O desenvolvimento do PHP 6 foi adiado pois os desenvolvedores decidiram que a abordagem atual de
tratamento das instncias unicode no est boa e esto considerando novas alternativas na nova verso
do PHP. As atualizaes pretendidas no PHP 6 foram includas ao PHP PHP 5.3.0 (suporte a
namespace, late static bindings, funces lambda, clausuras, goto) e 5.4.0 (traits, closure
rebinding).
Principais caractersticas
A linguagem PHP uma linguagem de programao de domnio especfico, ou seja, seu escopo se estende a um
campo de atuao que o desenvolvimento web, embora tenha variantes como o PHP-GTK. Seu propsito principal
de implementar solues web velozes, simples e eficientes. Caractersticas:
Velocidade e robustez.
Estruturado e orientao a objetos.
Portabilidade - independncia de plataforma - escreva uma vez, rode em qualquer lugar.
Tipagem dinmica.
Sintaxe similar a C/C++ e o Perl.
Open-source.
Server-side (O cliente manda o pedido e o servidor responde em pagina HTML)
PHP
249
Vetores e matrizes
Os vetores e matrizes em PHP, diferente do que ocorre em C/C++ e Pascal, uma estrutura dinmica, o que pode
facilitar muito o trabalho do programador.
Um exemplo:
<?php
$vet01 = array();
$vet01[] = "Sistemas operacionais";
$vet01[] = "Compiladores";
$vet01[] = "Bancos de dados";
$vet02 = array(1, 2, 3, 4, 5);
$vet03 = array( 0 => 0, 2 => 3, 10 => "item 10");
for ($i = 0; $i < count($vet01); $i++) {
echo $vet01[$i] . "<br />";
}
?>
O exemplo acima demonstra trs maneiras diferentes de declarar vetores.
PHP 5
Em junho de 2004 foi lanada a verso 5 do PHP, introduzindo um novo modelo de orientao a objeto, incluindo a
reformulao dos construtores e adio de destrutores (ver exemplo contextualizado em anexo), visibilidade de
acesso, abstrao de objeto e interfaces de objetos.
O tratamento de objetos do PHP foi completamente reescrito, permitindo um desempenho melhor e mais vantagens.
Enquanto na verso anterior era preciso muito esforo para atender orientao a objetos e aos padres de projectos
(alguns no eram possveis), o PHP 5 veio para sanar essa deficincia. Ainda sofre nesse sentido, contudo, por
problemas devido a ser uma linguagem de tipagem fraca.
Induo de tipo
Nesse sentido, foi adicionada uma caracterstica chamada de induo de tipo, de acordo com a qual podemos ter uma
certa tipagem quando passamos objetos aos parmetros de uma funo (ou mtodo), algo inconcebvel na verso
anterior. Ver exemplo contextualizado em anexo.
[carecede fontes?]
Visibilidade
A visibilidade de uma propriedade ou mtodo pode ser definida com os seguintes modificadores de acesso: public,
protected ou private. Itens declarados como pblicos podem ser acessados pelo objeto (instncia da classe).
Membros protegidos esto acessveis s classes filhas (herdadas). A visibilidade privada limita a apenas a classe que
define o atributo ou mtodo. Ver exemplo contextualizado em anexo.
[carecede fontes?]
PHP
250
Polimorfismo
Polimorfismo Paramtrico
No polimorfismo paramtrico, um mesmo objeto pode ser utilizado uniformemente como parmetro em diferentes
contextos sem necessidade de alteraes. Um mtodo que exibe polimorfismo paramtrico (tambm chamada de
mtodo genrico) permite que o tipo do seu argumento seja determinado por um parmetro de tipo implcito ou
explcito, executando uma mesma operao, independente do tipo do argumento. O PHP no requer (ou suporta) a
definio de tipo explcita na declarao de variveis: o tipo de uma varivel determinado pelo:
[carecede fontes?]
contexto em que a varivel utilizada. Isto significa que, se voc atribuir um valor string para a varivel $var,
$var se torna uma string
Se voc ento atribuir um valor inteiro para $var, ela se torna um inteiro. Por isso o PHP no adota este tipo de
polimorfismo, pois no possui parmetros genricos
Polimorfismo por Incluso
No polimorfismo por incluso um objeto pode ser visto como pertencendo a diferentes classes que no precisam ser
disjuntas. O PHP adota esse tipo de polimorfismo, pois uma linguagem orientada a objeto que permite recursos de
herana.
Polimorfismo por Coero
O PHP tambm suporta o polimorfismo por coero, no qual a linguagem dispe de uma operao semntica para
converter um argumento para um tipo esperado por uma funo, em uma situao que de outra forma resultaria em
um erro de tipo.
[carecede fontes?]
Extenses
Extenses do PHP:
Funes de compresso de bzip2
Funes de converso de Calendar
Funes de ClibPDF
Funes de crack
Famlia de funes ctype
Biblioteca de rotinas de cliente URL - CURL
Funes de pagamento Cybercash
Funes DBM
Camada de funes de abstrao de banco de dados DBA
Funes de dBase
Funes dbx
Funes DOM XML
Funes .NET
Funes EXIF
Funes FrontBase
Funes de formato de dados de formulrios (Forms Data Format) FDF.
Funes de filePro
Funes de FTP
Funes da biblioteca de imagens GD
Funes de Gettext
PHP
251
Funes de HyperWave
Converso de tabela de caracteres ICONV
Funes de Informix
Funes de manuseio de IIS
Funes de IMAP POP3 e NNTP
Funes de Ingres II
Funes de InterBase
Funes de Java
Funes de LDAP
Funes de Multi-Byte String
Funes de Mcrypt Encryption
Funes de Mhash
Funes de Mimetype
Funes de Ming para Flash
Funes de mSQL
Funes de MSSQL
Funes de MySQL
Funes de MySQLi
Funes de Oracle 8
Funes de OpenSSL
Funes de Oracle
Funes de sobrecarga de objectos
Funes de PDF
Funes de PostgreSQL
Funes de impressora
Funes de memria Compartilhada
Funes de get and walk de SNMP
Funes de SOAP
Funes de socket
Funes de Sybase
Funes de Tidy
Funes de Tokenizer
Funes de W32api
Funes de XML-RPC
Funes de XSLT
Funes do YAZ
Funes para Arquivos Zip
Funes de compresso de ZLib
PHP
252
Bibliografia
SICA, Carlos. PHP COM TUDO. 1ed. Rio de Janeiro - RJ:Cincia Moderna, 2011.552 p. 1vol. vol.1. ISBN
978-85-399-0002-2
SICA, Carlos. PHP Orientado a Objetos: Fale a Linguagem da Internet. 1ed. Rio de Janeiro - RJ:Cincia
Moderna, 2006.216 p. 1vol. vol.1. ISBN 978-85-7393-553-0
SICA, Carlos. Programao Segura Utilizando PHP: Fale a Linguagem da Internet. 1ed. Rio de Janeiro -
RJ:Cincia Moderna, 2007.100 p. 1vol. vol.1. ISBN 978-85-7393-608-7
DALL'OGLIO, Pablo. PHP Programando com Orientao a Objetos
[19]
: Inclui Design Patterns. 1ed. So
Paulo:Novatec, 2007.576 p. ISBN 978-85-7522-137-2
DALL'OGLIO, Pablo. PHP-GTK Criando Aplicaes Grficas com PHP
[20]
. 2ed. So Paulo:Novatec,
2007.445 p. ISBN 978-85-7522-110-5
MELO, Alexandre Altair de; NASCIMENTO, Mauricio G. F. PHP Profissional
[21]
: Aprenda a desenvolver
sistemas profissionais orientados a objetos com padres de projeto. 1ed. So Paulo:Novatec, 2007.464 p. ISBN
978-85-7522-141-9
Herbert G. Fisher, PHP Guia de Consulta Rpida, Editora Novatec, ISBN 85-85184-69-8
Ligaes externas
Pgina oficial
[1]
(em ingls)
PHP
[22]
no Open Directory Project
Referncias
[1] http:/ / www. php. net/
[2] PHP on Hormones de Rasmus Lerdorf (http:/ / itc.conversationsnetwork. org/ shows/ detail3298. html)
[3] slides for 'PHP on Hormones' talk por Lerdorf (http:/ / talks. php. net/ show/ mysql07key/ 3)
[4] http:/ / php. net/ releases/ index.php
[5] PHP: News Archive - 2010 (http:/ / www. php.net/ archive/ 2010. php#id2010-12-16-1)
[6] http:/ / www. php. net/ ChangeLog-5. php#5.3.1
[7] http:/ / www. php. net/ ChangeLog-5. php#5.3.14
[8] http:/ / www. php. net/ ChangeLog-5. php#5.3.15
[9] http:/ / www. php. net/ ChangeLog-5. php#5.3.16
[10] http:/ / www.php. net/ ChangeLog-5. php#5.3.17
[11] http:/ / www.php. net/ ChangeLog-5. php#5.3.21
[12] http:/ / www.php. net/ ChangeLog-5. php#5.4.1
[13] http:/ / www.php. net/ ChangeLog-5. php#5.4.4
[14] http:/ / www.php. net/ ChangeLog-5. php#5.4.5
[15] http:/ / www.php. net/ ChangeLog-5. php#5.4.6
[16] http:/ / www.php. net/ ChangeLog-5. php#5.4.7
[17] http:/ / www.php. net/ ChangeLog-5. php#5.4.11
[18] http:/ / www.php. net/ ChangeLog-5. php#5.5.0
[19] http:/ / www.adianti.com.br/ phpoo
[20] http:/ / www.php-gtk. com. br/ book
[21] http:/ / www.novatec. com. br/ livros/ phppro
[22] http:/ / www.dmoz. org/ Computers/ Programming/ Languages/ PHP/
Ruby
253
Ruby
Ruby
Paradigma Multiparadigma
Surgido em 1995
ltima verso 2.1.1 (24 de Fevereiro de 2014)
Criado por Yukihiro Matsumoto
Estilo de tipagem: dinmica, forte
Dialetos: YARV, Ruby MRI, JRuby, Rubinius, IronRuby, MacRuby e HotRuby, RGSS
Influenciada por Ada, CLU, Dylan, Eiffel, Lisp, Perl, Python, Scheme, Smalltalk
Influenciou Falcon, Fantom, Groovy, Ioke, Nu
Licena: Dupla: Ruby License / FreeBSD License
Pgina oficial
www.ruby-lang.org
[1]
Ruby uma linguagem de programao interpretada multiparadigma, de tipagem dinmica e forte, com
gerenciamento de memria automtico, originalmente planejada e desenvolvida no Japo em 1995, por Yukihiro
"Matz" Matsumoto, para ser usada como linguagem de script. Matz queria uma linguagem de script que fosse mais
poderosa do que Perl, e mais orientada a objetos do que Python. Ruby suporta programao funcional, orientada a
objetos, imperativa e reflexiva. Foi inspirada principalmente por Python, Perl, Smalltalk, Eiffel, Ada e Lisp, sendo
muito similar em vrios aspectos a Python. Atualmente, Ruby a 11 linguagem de programao mais popular do
mundo, de acordo com o ndice Tiobe.
A implementao 1.8.7 padro escrita em C, como uma linguagem de programao de nico passe. No h
qualquer especificao da linguagem, assim a implementao original considerada de fato uma referncia.
Atualmente, h vrias implementaes alternativas da linguagem, incluindo YARV, JRuby, Rubinius, IronRuby,
MacRuby e HotRuby, cada qual com uma abordagem diferente, com IronRuby, JRuby e MacRuby fornecendo
compilao Just-In-Time e, JRuby e MacRuby tambm fornecendo compilao Ahead-Of-Time. A srie 1.9 usa
YARV (Yet Another Ruby VirtualMachine), como tambm a 2.0, substituindo a lenta Ruby MRI (Matz's Ruby
Interpreter).
Ruby
254
Histria
Yukihiro Matsumoto, criador da linguagem
Ruby
A linguagem Ruby foi concebida em 24 de fevereiro de 1993 por Yukihiro
Matsumoto, que pretendia criar uma nova linguagem que balanceava
programao funcional com a programao imperativa. Matsumoto
afirmou: "Eu queria uma linguagem de script que fosse mais poderosa do
que Perl, e mais orientada a objetos do que Python. por isso que eu decidi
desenvolver minha prpria linguagem.".
Aps o lanamento do Ruby 1.3 em 1999, iniciou-se a primeira lista de
discusso em ingls chamada Ruby-Talk, marcando um interesse crescente
na linguagem fora do Japo. Em setembro de 2000, o primeiro livro em
ingls, Programming Ruby
[2]
, foi impresso, sendo mais tarde liberado
gratuitamente para o pblico, ajudando no processo de adoo de Ruby por
falantes do ingls.
Por volta de 2005, o interesse pela linguagem Ruby subiu em conjunto com
o Ruby on Rails, um framework de aplicaes web popular escrito em
Ruby. Rails frequentemente creditada como a aplicao que tornou Ruby
"famosa" e a associao to forte que ambos so muitas vezes
confundidos por programadores que so novos a Ruby.
At a verso 1.9.2-p290, a linguagem era lanada sob a licena dupla Ruby License / GNU General Public License.
A partir da verso 1.9.3-p0, passou a ser lanada sob a licena dupla Ruby License / FreeBSD License (tambm
conhecida como 2-clause BSDL).
A partir da verso 2.1.0, o projeto passou a utilizar versionamento semntico.
Suporte oficial para a verso 1.9.3 se encerrar dia 23 de fevereiro de 2015.
Etimologia do nome "Ruby"
O nome "Ruby", foi decidido durante uma sesso de bate-papo online entre Matsumoto (Matz) e Keiju Ishitsuka em
24 de fevereiro de 1993, antes que qualquer linha de cdigo tivesse sido escrita para a linguagem. Inicialmente foram
propostos dois nomes: "Coral" e "Ruby", sendo esse ltimo nome proposto escolhido mais tarde por Matz em um
e-mail para Ishitsuka. Matsumoto explicou mais tarde que o motivo de ter escolhido o nome "Ruby" foi porque essa
era a pedra zodiacal de um de seus colegas.
Caractersticas
Uma srie de caractersticas foram definidas para atender s propostas do Ruby:
Todas as variveis so objetos, onde at os "tipos primitivos" (tais como inteiro, real, entre outros) so classes
Mtodos de gerao de cdigo em tempo real, como os "attribute accessors"
Atravs do RubyGems, possvel instalar e atualizar bibliotecas com uma linha de comando, de maneira similar
ao APT do Debian Linux
Code blocks (blocos de cdigo) passados como parmetros para mtodos; permite a criao de clausuras
Mixins, uma forma de emular a herana mltipla
Tipagem dinmica, mas forte. Isso significa que todas as variveis devem ter um tipo (fazer parte de uma classe),
mas a classe pode ser alterada dinamicamente
Ruby est disponvel para diversas plataformas, como Microsoft Windows, Linux, Solaris e Mac OS X, alm de
tambm ser executvel em cima da mquina virtual Java (atravs do JRuby) e haver um projeto para ser executvel
em cima da mquina virtual Microsoft .NET, o IronRuby.
Ruby
255
Tipos de dados
No existem "tipos primitivos" em Ruby; todos os tipos so classes:
Object a classe me de todas as outras classes em Ruby
Numeric uma classe abstrata que representa nmeros
Integer uma classe que representa nmeros inteiros
Fixnum representa nmeros inteiros de preciso fixa
Bignum representa nmeros inteiros de preciso infinita, dependente apenas da memria disponvel
Float uma classe que representa nmeros de ponto flutuante (nmeros reais)
String uma cadeia de caracteres. Pode ser delimitado por apstrofes (') ou aspas ("). Tudo o que h entre
apstrofes interpretado literalmente, entre aspas o programador deve se utilizar de smbolos para representar
caracteres especficos, como em C. Exemplos: 'azul', "a\nb\nc"
Symbol semelhante a uma string, mas dois smbolos iguais possuem o mesmo endereo de memria, sendo
assim timo para se utilizar como ndice numa Hash. Porm, devido sua natureza, o coletor de lixo do Ruby
no os elimina. definido com um sinal de dois pontos (:), por exemplo, :nome
Array so arrays dinmicos, que podem ser usados para representar matrizes e vetores. delimitado por
colchetes ([]) e cada valor separado por vrgula. Exemplo: [4, 'azul', :termometro]
Hash representa um vetor associativo, e, assim como as Arrays, dinmica. delimitada por chaves ({}), e o
ndice precede o valor com um sinal '=>'. Exemplo: {:controller => 'user', :action => 'index'}. Qualquer objeto
pode ser um ndice, mas os mais usados so as Strings e os Symbols
Regexp representa expresses regulares, delimitadas por //. Funciona de forma semelhante a Perl. Exemplo:
/a|ae/
Declarao de variveis
Um objeto em Ruby declarado com uma atribuio comum:
var1 = 2
var2 = Classe.new
var3 = Classe2.new(parametro)
Uma varivel local declarada normalmente. Uma varivel de instncia declarada com um "@" no nome. Uma
varivel de classe declarada com "@@", e uma varivel global declarada com "$". Variveis que iniciam com
uma letra maiscula so consideradas constantes.
local = "local"
@instancia = 42
@@classe = /f+/
$Pi = 3.1415926
Ruby
256
Exemplos de cdigo
Programa Ol Mundo
puts "Ol, Mundo!"
Strings
H uma variedade de mtodos para definir strings em Ruby. As definies a seguir so equivalentes e suportam
interpolao. Note a diferena entre resultados dos comandos "print", "puts" e "p":
print a = "\nIsto uma string de aspas duplas\n"
puts a = %Q{\nIsto uma string de aspas duplas\n}
p a = %{\nIsto uma string de aspas duplas\n}
p a = %/\nIsto uma string de aspas duplas\n/
p a = <<BLOCO
Isto uma string de aspas duplas
BLOCO
O cdigo a seguir define duas strings "cruas" que so equivalentes:
p a = 'Isto uma string de aspas simples'
p a = %q{Isto uma string de aspas simples}
Colees
Array
a = [1, 'oi', 3.14, 1, 2, [4, 5]]
a[2] # => 3.14
a.reverse # => [[4, 5], 2, 1, 3.14, 'oi', 1]
a.flatten.uniq # => [1, 'oi', 3.14, 2, 4, 5]
a.push(23) # a = [1, 'oi', 3.14, 1, 2, [4, 5], 23]
a << 22 # a = [1, 'oi', 3.14, 1, 2, [4, 5], 23, 22]
Hash
hash = {'gua' => 'molhada', 'fogo' => 'quente'}
puts hash['fogo'] # "quente"
hash.each_pair do |chave, valor|
puts "#{chave} #{valor}"
end
# Imprime:
# gua molhada
# fogo quente
hash.delete_if {|chave, valor| chave == 'gua'} # Apaga 'gua' =>
Ruby
257
'molhada'
Blocos e iteradores
Blocos de cdigo (ou code blocks) so trechos de cdigo que so passados como parmetros para mtodos. Blocos
so extremamente usados em Ruby.
class Paises
@paises = ["Argentina", "Brasil", "Paraguai", "Uruguai"]
def self.each
for pais in @paises
yield pais
end
end
end
Paises.each do |pais|
puts "Ol, #{pais}!"
end
Iterando em arrays usando blocos:
array = [1, 'oi', 3.14]
array.each do |item|
puts item
end
# => 1
# => 'oi'
# => 3.14
# Equivalente, usando chaves:
array.each { |item|
puts item
}
# => 1
# => 'oi'
# => 3.14
Em Ruby, a estrutura de repetio for apenas acar sinttico para acessar o mtodo each, existente em iteratores.
array = [1, 'oi', 3.14]
for item in array
puts item
end
# => 1
# => 'oi'
# => 3.14
Ruby
258
Blocos funcionam com muitos mtodos padro; no exemplo a seguir, o uso de blocos com arquivos:
File.open('arquivo.txt', 'w') do |arquivo|
for i in (1..3) do
arquivo.puts 'Ol, Mundo!'
end
end # O arquivo fechado
automaticamente aqui
File.readlines('arquivo.txt').each do |linha|
puts linha
end
# => Ol, Mundo!
# => Ol, Mundo!
# => Ol, Mundo!
Criando uma funo annima:
proc {|arg| print arg}
Proc.new {|arg| print arg}
lambda {|arg| print arg}
Classes
O cdigo a seguir define uma classe chamada Pessoa. Alm de initialize, o construtor para criar novos objetos, essa
classe tem dois mtodos: um que sobre-escreve o operador de comparao > (maior), e sobre-escreve o mtodo
to_s (assim o comando puts pode formatar a sada). Aqui attr_reader um exemplo de metaprogramao
em Ruby: attr_reader define o mtodo getter, attr_writer define o mtodo setter, e attr_accessor
define ambos. Em Ruby, todos os atributos so privados e todos os mtodos pblicos, por padro. Ruby permite
definir opcionalmente o tipo de acesso usando trs palavras-chave: public (pblico), private (privado) e protected
(protegido). Ruby no suporta sobrecarga de mtodos, mas suporta argumentos padro, que podem ser utilizados
para o mesmo fim. Tambm, o ltimo comando em um mtodo considerado o seu valor de retorno, permitindo a
omisso de um explcito return.
class Pessoa
attr_reader :nome, :idade
def initialize(nome = "Desconhecido", idade)
@nome, @idade = nome, idade
end
def >(pessoa)
if self.idade > pessoa.idade
return true
else
return false
end
end
Ruby
259
def to_s # Mtodo usado pelo mtodo puts() para formatar a sada
"#@nome (#@idade anos)"
end
end
pessoas = [
Pessoa.new("Ricardo", 19),
Pessoa.new(idade = 25)
]
puts pessoas[0]
puts pessoas[1]
puts pessoas[0] > pessoas[1] # O mesmo que: pessoas[0].>(pessoas[1])
O cdigo acima ir imprimir:
Ricardo (19 anos)
Desconhecido (25 anos)
false
Classes abertas
Em Ruby, as classes nunca so fechadas: voc pode sempre adicionar novos mtodos a uma classe. Isso se aplica
tanto para classes criadas por voc, quanto para as classes padro. Um exemplo simples de adio de um novo
mtodo a classe padro String:
class String
def iniciais
ini = String.new
for nome in self.split do
ini += nome[0]
end
return ini
end
end
puts "Ricardo Silva Veloso".iniciais # Imprime RSV
Herana
Ruby no suporta herana mltipla. Ao invs disso, Ruby usa Mixins para emular herana mltipla:
class Pessoa < Mamifero # Herana de Mamifero
include Humano # Emulando herana mltipla
end
No exemplo acima, "Humano" um mdulo (module).
Ruby
260
Modules
Alm das classes normais, Ruby possui os "Modules", que so classes de classes, permitindo espao de nomes:
module Humano
class Classe1
def info
"#{self.class} (\##{self.object_id}): #{self.to_s}"
end
end
end
Tratamento de excees
Como a maioria das linguagens modernas, Ruby tambm possui suporte para tratamento de exceo. As
palavras-chave para isto so "begin", "rescue" e "ensure". "Begin" inicia um trecho que pode cair em alguma
exceo (opcional), "Rescue" determina o comportamento em caso de uma exceo especfica ou no e, "Ensure" o
cdigo que ser executado independente de ter havido exceo ou no.
begin
# Faa algo
rescue
# Trata alguma exceo
else
# Faa isto se nenhuma exceo for lanada
ensure
# Faa isto se alguma ou nenhuma exceo for lanada
end
Ruby para administradores de sistemas
A maioria dos administradores de sistemas Unix utilizam Perl ou Shell Script como ferramenta para resolver os
problemas. Mas possvel usar Ruby e Python para os mesmos fins. Abaixo, a idia fazer um pequeno script que
verifica se o servio da porta 80 (Web) de alguns servidores estavam ativos.
require 'net/http'
File.open("hosts.txt", "r").each_line do | host |
conexao = Net::HTTP.new(host.chomp, 80)
resposta, conteudo = conexao.get("/", nil)
if resposta.code.to_i > 400
# aqui vai a rotina pra enviar email...
end
end
Ruby
261
Repositrios e bibliotecas
Ruby possui repositrios de bibliotecas disponveis em sites como Ruby Forge e The Ruby Toolbox; um bastante
popular, Ruby Application Archive (RAA), foi descontinuado em agosto de 2013. Existe, ainda, uma ferramenta de
instalao de bibliotecas, chamada RubyGems, semelhante aos gerenciadores de pacotes do Linux, como o APT.
Muitos projetos foram movidos para o GitHub, focado em Git, que tinha suporte nativo ao empacotamento do
RubyGems. Porm, esse servio de empacotamento foi descontinuado, em prol de Jeweler e Gemcutter.
O projeto mais famoso desenvolvido em Ruby o meta-framework Ruby on Rails.
Ligaes externas
Pgina oficial
[1]
(em japons, em ingls e em portugus)
Ruby
[3]
no GitHub
The Book Of Ruby
[4]
(em ingls)
O Guia (comovente) de Ruby do Why
[5]
(em portugus)
Aprenda a Programar
[6]
(em portugus)
Ruby
[7]
no Open Directory Project
Referncias
[1] https:/ / www. ruby-lang. org/
[2] http:/ / ruby-doc. org/ docs/ ProgrammingRuby/
[3] https:/ / github.com/ ruby/ ruby
[4] http:/ / www. sapphiresteel. com/ the-book-of-ruby
[5] http:/ / why. nomedojogo. com/
[6] http:/ / aprendaaprogramar.rubyonrails. pro. br
[7] http:/ / www. dmoz. org/ Computers/ Programming/ Languages/ Ruby/
262
Os anos 2000
C
1. REDIRECIONAMENTO C Sharp
Clojure
Clojure
Paradigma funcional
Surgido em 2007
Criado por Rich Hickey
Estilo de tipagem: forte, dinmica
Compiladores JVM, CLR
Dialetos: Lisp, Scheme, Common Lisp
Influenciada por Lisp, Prolog, ML, Haskell, Erlang
Licena: Eclipse Public License
Clojure, na informtica, uma variante moderna de Lisp, desenvolvida por Rich Hickey. Clojure roda sobre a Java
Virtual Machine (JVM).
Introduo
Clojure um dialeto moderno da linguagem de programao Lisp, Scheme e Common Lisp e roda na Java Virtual
Machine ou CLR (Common Language Runtime). um paradigma de linguagem de programao funcional. Como a
linguagem Lisp, a sintaxe Clojure construda em S-expressions.
Rich Hickey desenvolveu Clojure porque queria um Lisp moderno em programao funcional, que tivesse simbitica
a plataforma Java e concebido para multiconcorrncia. Esta concorrncia caracteriza pelo conceito de identidades,
que representam uma srie de estados imutveis ao longo do tempo e, tendo os valores imutveis, qualquer nmero
pode trabalhar em paralelo. Clojure fornece vrios tipos de referncia mutveis para transio entre estados.
Clojure
263
Caracterstica da Linguagem
Uma linguagem compilada produzindo um bytecode JVM
Desenvolvimento dinmico
nfase na recursividade
Concorrncia
Exemplos de cdigo
(println "Ol, Mundo!")
Ligaes externas
Pgina oficial
[1]
(em ingls)
Referncias
[1] http:/ / clojure. org/
264
Extenses orientadas aspectos
AspectJ
Geral
AspectJ uma linguagem de programao pertencente ao paradigma orientado aspectos, que consiste basicamente
em retirar os interesses transversais(crosscutting ou separation of concerns) de um programa em Java.
Um fator que difere o AspectJ das demais linguagens de programao, o fato de no ser possvel construir
programas usando somente o AspectJ, sendo necessrio tambm utilizar [Java]. Isso vem pela prpria idia do
paradigma orientado aspectos, sendo usada para "customizar" programas em Java, solucionando alguns problemas
decorrentes da Orientao a objetos.
Alguns exemplos de problemas da Orientao a objetos so os logs das aplicaes e a parte de segurana. Nesses
casos, por se trabalhar com objetos, inevitvel a dependncia excessiva dos objetos que fazem os logs e a parte de
segurana, o que conhecido como interesse tranversal, os logs e segurana, no fazem parte do core-business da
aplicao, porm so extremamente necessrios. Para solucionar esses problemas foi criado o conceito do paradigma
orientado aspectos e da linguagem "auxiliar" AspectJ.
AspectJ no possui um sistema de tipos.
Histria
Foi desenvolvida por uma diviso de pesquisa da Xerox, chamado Xerox PARC. Hoje mantido pela Eclipse
Fundation, mantenedora de alguns projetos de cdigo aberto e integrado na ferramenta de desenvolvimento Eclipse
(IDE). Foi idealizada por Gregor Kiczales, professor da University of British Columbia no Canad.
Como o AspectJ funciona
Um aspecto age, interferindo no programa original, utilizando a ideia de join point, onde o aspecto descrito. Nessa
descrio, defini-se algumas regras de interferncia, como:
* pointcuts.
* advices.
* declarao de inter-tipos.
Exemplos de Sintaxe
Um exemplo bsico de um aspecto:
aspect VisitAspect {
void Point.acceptVisitor(Visitor v) {
v.visit(this);
}
}
Hello World em AspectJ:
AspectJ
265
public class HelloWorld {
public static void main(String[] args) {
}
}
public aspect HelloFromAspectJ {
pointcut mainMethod() : execution(public static void main(String[]));
after() returning : mainMethod() {
System.out.println("Hello World");
}
}
Por ser uma linguagem que no existe por si s, ou seja depende do Java, no possvel ter resolues de alguns
algortmos simples como por exemplo calcular os nmeros perfeitos.
Ligaes externas
Pgina da Eclipse Fundation: [1]
Artigo do JavaFree: [2]
Artigo(em ingls) sobre uso do AspectJ no Spring: [3]
Referncias
[1] http:/ / www. eclipse.org/ aspectj/
[2] http:/ / javafree. uol. com.br/ artigo/ 871488/ AspectJ-em-20-minutos. html
[3] http:/ / www. infoq.com/ articles/ Simplifying-Enterprise-Apps
Fontes e Editores da Pgina
266
Fontes e Editores da Pgina
Histria das Linguagens de Programao Fonte: http://pt.wikipedia.org/w/index.php?oldid=38060147 Contribuidores: Dbastro, Fvmp, Jrgdelrisco, Lechatjaune, Ricardo Augustinis, Ricardo
Ferreira de Oliveira, Sandro Madruga Silveira, Stuckkey, Zdtrlik, 11 edies annimas
Charles Babbage Fonte: http://pt.wikipedia.org/w/index.php?oldid=38347731 Contribuidores: Agil, Beremiz, Castelobranco, Celiofranco, Claudios, Dtavares, Eduardo Henrique Rivelli Pazos,
Fernaodias, Giro720, Jonas AGX, JustinDecker1, Kaktus Kid, Laobc, Lechatjaune, MarioM, Mesh, Mschlindwein, Mwaldeck, Nuno Tavares, OTAVIO1981, Petrus Yuri, Rei-artur, Ricardo
Ferreira de Oliveira, Simoes, Xexeo, 40 edies annimas
Ada Lovelace Fonte: http://pt.wikipedia.org/w/index.php?oldid=38782027 Contribuidores: !Silent, Agil, Biologo32, Carlos Luis M C da Cruz, Crash Overclock, Diraol, Dvulture, Ednei da
Silva Rosa, Fabsouza1, Francisco Leandro, Geovani.s, Giro720, Hallel, I2bdad, Indech, Joao4669, Jovem Werther, Joo Carvalho, Kaktus Kid, Less, Luckas Blade, LusaMFerreira,
Mschlindwein, Nuno Tavares, Onjacktallcuca, Pedro Listel, Petrus Yuri, Raphael Figueira, Regi-Iris Stefanelli, Rei-artur, Reporter, Ricardo Ferreira de Oliveira, Rvnovaes, Salgueiro, Simoes,
Stuckkey, Thom, Troll, Wikipedista, 54 edies annimas
Herman Hollerith Fonte: http://pt.wikipedia.org/w/index.php?oldid=38238078 Contribuidores: Agil, Bruno Ishiai, CapEnt, Dantadd, Darwinius, Eduardoferreira, Jic, Kaktus Kid,
Mschlindwein, OS2Warp, Palica, RafaAzevedo, Renato de carvalho ferreira, Ritateixeira28, Sam, Skoll, Triquetra, Zoldyick, 26 edies annimas
Alan Turing Fonte: http://pt.wikipedia.org/w/index.php?oldid=38923244 Contribuidores: !Silent, Agil, Ale vx, Alexg, Antero de Quintal, Argenti, Belanidia, Bem bom, Bepp, Bisbis, Bitolado,
Castrolobo, ChristianH, Ci.cp, Danilomath, Devilwar, Diego Queiroz, Dmozglbtbr, Ddi's, E2m, Eonzoikos, Eric Duff, Feen, GilliamJF, Giro720, Gustavo Destro, Helder.wiki, Jbribeiro1,
Jefferson055, Jjesuswiki, Jmx, Joseolgon, Juntas, Kaktus Kid, Kenchikka, LP Srgio LP, Laobc, Leandrogpp, Leonardo.stabile, LeonardoRob0t, MCarsten, MachoCarioca, Matheus S,
Mschlindwein, Nice poa, Nuno Tavares, OTAVIO1981, Osias, Petrus Yuri, PortugalSuperGay, Prowiki, Quiumen, Rafael.afonso, Ricardo Ferreira de Oliveira, Salgueiro, Simoes, Sowiki50,
Stuckkey, Sturm, Teles, Vanthorn, Yone Fernandes, Zoldyick, 81 edies annimas
Alonzo Church Fonte: http://pt.wikipedia.org/w/index.php?oldid=37833810 Contribuidores: Agil, Ale vx, Arthur Buchsbaum, Beria, Daniel Feliciano, Diego Queiroz, Eonzoikos,
Humbertobrandao, Kaktus Kid, Lijealso, Patrick, Thebext, 4 edies annimas
Konrad Zuse Fonte: http://pt.wikipedia.org/w/index.php?oldid=37894291 Contribuidores: 4you, Adailton, Agil, Joaotg, Kaktus Kid, Rodrigolopes, Rubens Luccas, Simoes, Theus PR,
Wikipedista, 19 edies annimas
Z1 Fonte: http://pt.wikipedia.org/w/index.php?oldid=34934443 Contribuidores: Adailton, Al Lemos, Ciro, Dbastro, Eberval.castro, Jic, Leonardo.stabile, LeonardoG, Ricardo Ferreira de
Oliveira, Samuelpeixoto, 3 edies annimas
Z2 Fonte: http://pt.wikipedia.org/w/index.php?oldid=34936405 Contribuidores: Adailton, Ciro, Dbastro, DoubleG2, Fs almeida bf, Leonardo.stabile, Rfdias, Samuelpeixoto, Tonyjeff, 2 edies
annimas
Z3 Fonte: http://pt.wikipedia.org/w/index.php?oldid=36642034 Contribuidores: Ciro, Dbastro, Geovani.s, Hermgenes Teixeira Pinto Filho, Vinicius Paulo Seze, 3 edies annimas
Z4 Fonte: http://pt.wikipedia.org/w/index.php?oldid=35050810 Contribuidores: Daimore, Dbastro, Fs almeida bf
O Colossus Fonte: http://pt.wikipedia.org/w/index.php?oldid=38631990 Contribuidores: Albmont, Ale vx, Alexg, Cainamarques, Dbastro, DoubleG2, Hyju, Leonardo.stabile, Mont4nha, Nuno
Tavares, Sturm, Xexeo, 10 edies annimas
Harvard Mark I Fonte: http://pt.wikipedia.org/w/index.php?oldid=34974975 Contribuidores: Dbastro, Leonardo.stabile, Lus Felipe Braga, Yanguas, Yvanici, Zoldyick, 3 edies annimas
ENIAC Fonte: http://pt.wikipedia.org/w/index.php?oldid=38739917 Contribuidores: !Silent, 333, Arges, Caio.gallo, Carlos28, Chicocvenancio, Clara C., Cleberjean, Cleitonx1, Colaborador Z,
CorreiaPM, Dbastro, Devilr0ck123, Devoglio, Edinaldo B. Freitas, GOE, Gean, HVL, JotaCartas, Kaktus Kid, Kleiner, Leonardo.stabile, Lijealso, Lus Felipe Braga, Lpton, Mvdiogo,
OS2Warp, PatrciaR, PauloEduardo, Plataformista, Prima.philosophia, Py4nf, Rafaelguita00, Raul Caarvalho, Reporter, Ricardo Augustinis, Rui Malheiro, Rush, Staab, Stuckkey, Teles,
Themafiakiller, Victor R12, Viniciusmc, Vitor Mazuco, Zoldyick, 240 edies annimas
EDVAC Fonte: http://pt.wikipedia.org/w/index.php?oldid=38922035 Contribuidores: !Silent, Al Lemos, MisterSanderson, 9 edies annimas
Plankalkl Fonte: http://pt.wikipedia.org/w/index.php?oldid=38512236 Contribuidores: !Silent, Adailton, Clarice Reis, Davemustaine, Dbastro, Eamaral, Jjfreitas, Mschlindwein, Ruy Pugliesi,
Stuckkey, UN Jose Freitas, Wikipedista, 4 edies annimas
Short Code Fonte: http://pt.wikipedia.org/w/index.php?oldid=36857491 Contribuidores: Dbastro, Leonardo.stabile, Ricardo Ferreira de Oliveira
Sistema A-0 Fonte: http://pt.wikipedia.org/w/index.php?oldid=38869683 Contribuidores: Dbastro, Fvmp, Ricardo Ferreira de Oliveira, Vitor Mazuco, 1 edies annimas
Personagem: John Backus Fonte: http://pt.wikipedia.org/w/index.php?oldid=34923642 Contribuidores: 333, Beto, Clarice Reis, Kaktus Kid, Leonardo.stabile, Rafael.afonso, Ricardo Ferreira
de Oliveira, Rigolin, 3 edies annimas
Speedcoding Fonte: http://pt.wikipedia.org/w/index.php?oldid=35447655 Contribuidores: Ricardo Ferreira de Oliveira
Personagem: Grace Hopper Fonte: http://pt.wikipedia.org/w/index.php?oldid=38647951 Contribuidores: Antero de Quintal, Coltsfan, Daemorris, Deniscostadsc, Filipe Saraiva, Hsvab,
Jjesuswiki, Jos Carlos J. Vital, Kaktus Kid, Leonardo.stabile, Luckas Blade, Lus Felipe Braga, Mwaldeck, Orelhas, Stuckkey, Victorwss, rico Jnior Wouters, 37 edies annimas
Flow-Matic Fonte: http://pt.wikipedia.org/w/index.php?oldid=36857359 Contribuidores: Dbastro, Ricardo Ferreira de Oliveira, Xexeo
Fortran Fonte: http://pt.wikipedia.org/w/index.php?oldid=38543892 Contribuidores: Alchimista, Clara C., CommonsDelinker, CostaJES, Dbastro, Drenoel, Eamaral, EduM, EduRihan, Eisdur,
FSogumo, Fernando S. Aldado, Fortranplus, Gbiten, Helderpc, Hugocanalli, JMGM, Joaopchagas2, Kaktus Kid, Lameiro, Leonardo.stabile, LeonardoG, Lijealso, Lipehauss, Lus Felipe Braga,
Master, Mecanismo, Mschlindwein, Pcosmo, Quinelato, Rafael.afonso, Ricardo Ferreira de Oliveira, Rudnei.cunha, Sampayu, Tuga1143, Xexeo, 80 edies annimas
COMTRAN Fonte: http://pt.wikipedia.org/w/index.php?oldid=36929133 Contribuidores: Dbastro, Gunnex, Ricardo Ferreira de Oliveira, Yanguas, 3 edies annimas
COMIT Fonte: http://pt.wikipedia.org/w/index.php?oldid=34866524 Contribuidores: Ricardo Ferreira de Oliveira, Santana-freitas
ALGOL 58 Fonte: http://pt.wikipedia.org/w/index.php?oldid=37940104 Contribuidores: Eisdur, Rodrigo Padula, Xexeo, 1 edies annimas
FACT Fonte: http://pt.wikipedia.org/w/index.php?oldid=37094406 Contribuidores: Dbastro, J. A. S. Ferreira, Ricardo Ferreira de Oliveira
IPL Fonte: http://pt.wikipedia.org/w/index.php?oldid=36929098 Contribuidores: Dbastro, Eduardofeld, Hyju, J. A. S. Ferreira, Ricardo Ferreira de Oliveira
Personagem: John McCarthy Fonte: http://pt.wikipedia.org/w/index.php?oldid=38216740 Contribuidores: !Silent, 333, Beto, Eric Duff, FSogumo, Fabiano Tatsch, Hum Milho, Jayjr, Joo
Sousa, Kaktus Kid, Kolja21, LPrati, Leonardo.stabile, Lijealso, Lus Felipe Braga, Nice poa, Pepita Negra, Py4nf, Ricardo Ferreira de Oliveira, 5 edies annimas
LISP Fonte: http://pt.wikipedia.org/w/index.php?oldid=545211 Contribuidores: Alchimista, Alexg, Antoniopessoa, Antnio Leito, Carlos28, E2mb0t, FML, GOE, Icoeng, Jonas AGX, Joyo,
Joo Carvalho, Juntas, Kensu, Leonardo.stabile, LeonardoG, LeonardoRob0t, Lvaruzza, Manuel Anastcio, Master, Mecanismo, Mschlindwein, Netsettler, OS2Warp, Rafael.afonso, Ricardo
Ferreira de Oliveira, Rita.dos.santos, SallesNeto BR, Waldir, 77 edies annimas
COMIT Fonte: http://pt.wikipedia.org/w/index.php?oldid=34866524 Contribuidores: Ricardo Ferreira de Oliveira, Santana-freitas
RPG Fonte: http://pt.wikipedia.org/w/index.php?oldid=37094424 Contribuidores: !Silent, Adailton, Cesarious, Dbastro, FML, Leonardo.stabile, LeonardoG, Lus Felipe Braga, Nuno Tavares,
Ricardo Ferreira de Oliveira, Ricvelozo, 13 edies annimas
Fontes e Editores da Pgina
267
COBOL Fonte: http://pt.wikipedia.org/w/index.php?oldid=38749204 Contribuidores: !Silent, Amgauna, ChristianH, CommonsDelinker, Daimore, Daniloajoliveira, Dantadd, Dbastro, Dianakc,
E2m, Edermachado, Edu Niccio, Facc1986, Fneto, Francisco Leandro, Fvmp, GOE, Gbiten, Gerbilo, Get It, Guilherme, Ivnogueira, Jmbgouveia, Jos Carlos J. Vital, Jvdm, LeonardoG,
Lijealso, LonE, Lus Felipe Braga, Marcioadroaldo, Mschlindwein, Muriel Gottrop, Mrio e Drio, OS2Warp, Onjacktallcuca, Orium, Porantim, Projrev2, Raphael.lorenzeto, Rei-artur, Reporter,
Ricardo Ferreira de Oliveira, Rnbastos, Rui Silva, Stuckkey, Tiago Zeni, Tschulz, Tullez, Tumnus, Vicentesloboda, Yachee, Yanguas, Zumg, 132 edies annimas
Personagem: Peter Naur Fonte: http://pt.wikipedia.org/w/index.php?oldid=38215360 Contribuidores: 333, CommonsDelinker, Eric Duff, Hivakun, Kaktus Kid, Leonardo.stabile, Nice poa,
Renato Bullio, 9 edies annimas
ALGOL 60 Fonte: http://pt.wikipedia.org/w/index.php?oldid=37940105 Contribuidores: Malafaya, Ricardo Ferreira de Oliveira, Rodrigo Padula, Xexeo
SNOBOL Fonte: http://pt.wikipedia.org/w/index.php?oldid=36913638 Contribuidores: 213.58.49.xxx, Dbastro, Dvulture, JoaoMiranda, Jorge, Lameiro, Litrogenio89, Ricardo Ferreira de
Oliveira, Tsferreira, 4 edies annimas
CPL Fonte: http://pt.wikipedia.org/w/index.php?oldid=36872746 Contribuidores: Dbastro, Giro720, Pcromano, 2 edies annimas
BASIC Fonte: http://pt.wikipedia.org/w/index.php?oldid=38771486 Contribuidores: !Silent, Andre nho, Bons, Ciro, Dbastro, Der kenner, Diotti, Disnei, Eamaral, Edgard.magalhaes,
Emersongois, Ensjo, Felipe S Matos, Felipegaucho, Gbiten, Gunnex, Helder.wiki, Hyju, Jorge, JotaCartas, Kascyo, Leonardo.stabile, LeonardoG, LeonardoRob0t, Lgrave, Mara Silva, Matheus
Faria, Nice poa, Panglossa, Prima.philosophia, Raimundo Norberto, Reporter, Rhe, Ricardo Ferreira de Oliveira, Ricvelozo, Rjclaudio, Stuckkey, Willian cruz, Xandi, Xexeo, Xos, 49 edies
annimas
PL/I Fonte: http://pt.wikipedia.org/w/index.php?oldid=36928088 Contribuidores: 555, Capmo, CommonsDelinker, Czy, Czyyyy, Dbastro, Eclesiastes, Helder.wiki, Jorge, Kherrman,
LeonardoG, Liber7, OS2Warp, Palica, Ricardo Ferreira de Oliveira, Thevirus, ThiagoRuiz, Xexeo, 10 edies annimas
BCPL Fonte: http://pt.wikipedia.org/w/index.php?oldid=37094144 Contribuidores: Dbastro, Leonardo.stabile, LeonardoG, Orium, Rafael.afonso, Ricardo Ferreira de Oliveira, Ricvelozo, 3
edies annimas
Icon Fonte: http://pt.wikipedia.org/w/index.php?oldid=34430549 Contribuidores: !Silent, Ahyama, E2m, Jorge, Leonardo.stabile, LeonardoRob0t, Nuno Tavares, Rafael.afonso, Ricardo
Ferreira de Oliveira, Ricvelozo, Sturm, ThiagoRuiz, Vanthorn, Xexeo, 6 edies annimas
ALGOL 68 Fonte: http://pt.wikipedia.org/w/index.php?oldid=37940106 Contribuidores: Burmeister, Camponez, Joo Carvalho, NevilleDNZ, Oscar Antunes, Ricardo Ferreira de Oliveira,
Rodrigo Padula, Ttravesso, Xexeo, 3 edies annimas
B Fonte: http://pt.wikipedia.org/w/index.php?oldid=34740449 Contribuidores: !Silent, Bons, Daemorris, Fvmp, Leonardo.stabile, LeonardoG, Luis Dantas, Orium, Ricardo Ferreira de
Oliveira, Ricvelozo, Xexeo, Zamirvarandas, 11 edies annimas
APL Fonte: http://pt.wikipedia.org/w/index.php?oldid=37983529 Contribuidores: Ana couto, Castelobranco, Ciro, Dbastro, Kaktus Kid, Leonardo.stabile, Pkantek, Ricardo Ferreira de Oliveira,
Rodrigo Padula, 3 edies annimas
Simula Fonte: http://pt.wikipedia.org/w/index.php?oldid=36539631 Contribuidores: Agil, Eamaral, Fabiano Tatsch, Fabiogramos, Fvmp, Get It, Kaktus Kid, LeonardoG, Marcoapc,
Mschlindwein, Stevansilva, Xexeo, 7 edies annimas
Logo Fonte: http://pt.wikipedia.org/w/index.php?oldid=38711958 Contribuidores: !Silent, Adrianfreitas, Bisbis, Capmo, Carlos Luis M C da Cruz, CasperBraske, Dbastro, Der kenner,
Devoglio, Fernando S. Aldado, Fvmp, Gunnex, Israel77, Juliano.Bittencourt, Ka barros, Kakisson, Laura Nielsen, Lechatjaune, LeonardoG, Lord Mota, Lusitana, Marcelo Reis, MisterSanderson,
Mosca, Mpbarbosa, OS2Warp, Pauloslomp, Porantim, Rafael.afonso, Slomp, Sturm, Tiago.bentivegna, 89 edies annimas
Personagem: Niklaus Wirth Fonte: http://pt.wikipedia.org/w/index.php?oldid=38216701 Contribuidores: !Silent, Agil, DeathGhost, Get It, Kaktus Kid, Luckas Blade, Nice poa, Orium,
Ricardo Ferreira de Oliveira, Xandi, Zdtrlik, 3 edies annimas
Pascal Fonte: http://pt.wikipedia.org/w/index.php?oldid=38566412 Contribuidores: !Silent, Agil, Amgauna, Andr Koehne, Baseador, Belanidia, Bitolado, Cacatdias, Carlos Rosa PT,
Carlosnatal, CasperBraske, Circular, Dancunha98, Dbastro, E2m, Eclesiastes, Edu Niccio, Eduardo, Eduardoferreira, Enderson, Flaviocruz1, Francisco Leandro, Furadrae, Gean, Get It,
Gibanauts, Gladstone, Guilherme Paula, Higorrg, IcaroBragana, Indech, JSSX, Jorge Morais, Joo Carvalho, Kascyo, Lameiro, Leonardo.stabile, LeonardoG, Leuadeque, Lflrocha, Lijealso,
LordTuga, Lus Felipe Braga, Marcric, Mariolui, Mautf, Menezes1992, NH, Nunof, OS2Warp, Pipas1234, RafaAzevedo, Rafael.afonso, Rafaelrosa, Ramosinfo, Ricardo Ferreira de Oliveira,
Ricvelozo, Roberto Cruz, Rsjuliao, Rdi, Sekelsenmat, Shadlan, Stegop, Stuckkey, ThiagoRuiz, Tilgon, Tumnus, Valdirsjr, Vanthorn, Vini 175, VonNaturAustreVe, Waldir, Waltercruz, Xexeo,
219 edies annimas
Personagem: Dennis Ritchie Fonte: http://pt.wikipedia.org/w/index.php?oldid=38216537 Contribuidores: 333, Agil, ChristianH, CommonsDelinker, Daemorris, Fabsouza1, Kaktus Kid,
Leandrorr, LeonardoRob0t, Lus Felipe Braga, Manuquadros, Mecanismo, Mschlindwein, Orium, Rachmaninoff, Rafael.afonso, Ricvelozo, Santana-freitas, X spager, Zumg, 23 edies annimas
Personagem: Ken Thompson Fonte: http://pt.wikipedia.org/w/index.php?oldid=38216572 Contribuidores: !Silent, 333, Agil, Bolsoni, ChristianH, Heitor, Joaotg, Juliano, Kaktus Kid,
Mecanismo, Mschlindwein, Orium, Rafael.afonso, Repontin, Wa59, Xandi, 2 edies annimas
C Fonte: http://pt.wikipedia.org/w/index.php?oldid=38932433 Contribuidores: !Silent, 333, Alchimista, Alquimista Digital, Amgauna, AndreHahn, AndrelmGomes, Arges, Bacar machado,
Bencz, Bisbis, Chgsantos, Clara C., Claudiobl2010, Daemorris, Daimore, Darwinius, Dbastro, Dianakc, Dobau, Eamaral, ElementoX, Fnds, Francisco Paiva Junior, GOE, Get It, Gfc, Gil
mnogueira, Gravena, HVL, Heiligenfeld, Helder Ribeiro, Hexa, Hjxkyw, Ismaelbarbosa, Italo maia, JEduardo, JMCF125, Jack Bauer00, Jeferson, Joaodaveiro, Joaosilvakle, Jorge, Jorge.roberto,
Joo Carvalho, Juntas, Lameiro, Leonardo.stabile, LeonardoG, LeonardoRob0t, Leslie, Lgrave, Lijealso, Link88, Lopesmaio, Lucas Avano, Lucasridg, Luiz Jr, Lus Felipe Braga, Mago
Aprendiz, Manomauricio, Marcelo Meneses, Marcelo Reis, Master, Maxtremus, Mecanismo, Mosca, Mschlindwein, Nuno Tavares, OS2Warp, Orium, Panga, Patrick, Pedro.haruo, Phius, Piccilli,
Porantim, Profvalente, R.rvidal, Rafael Vargas, Rautopia, Ricardo Ferreira de Oliveira, Ricvelozo, Rjclaudio, Rui Malheiro, Ruy Pugliesi, Salamat, Salgueiro, Stego, Stuckkey, Tonyjeff, Tork,
Valdinilson, Vasconde, Victorwss, Vini 175, Viniciusmc, Vitor Mazuco, Waldir, Wbrito, Xandi, Xexeo, Yuu eo, 326 edies annimas
Ada Fonte: http://pt.wikipedia.org/w/index.php?oldid=37008116 Contribuidores: !Silent, Dbastro, Felipebarros.ti, FernandoPohl, Indech, Leonardo.stabile, LeonardoG, Lijealso, Lucasnar,
Nuno Tavares, OS2Warp, Opraco, Rafael.afonso, Rei-artur, Reporter, Reynaldo, Ricardo Ferreira de Oliveira, Rustin, Vargenau, Viniciusmc, Xexeo, 24 edies annimas
BLISS Fonte: http://pt.wikipedia.org/w/index.php?oldid=34739482 Contribuidores: JotaCartas, Myst, Ricardo Ferreira de Oliveira
Forth Fonte: http://pt.wikipedia.org/w/index.php?oldid=38541965 Contribuidores: !Silent, Bons, CasperBraske, Drruggeri, LeonardoG, Meira, 9 edies annimas
Smalltalk Fonte: http://pt.wikipedia.org/w/index.php?oldid=38342976 Contribuidores: !Silent, Agil, CommonsDelinker, EduM, Eduacsp, FML, Fabsouza1, Fvmp, Grillow, LeonardoG, Lus
Felipe Braga, Marcoapc, Mpbarbosa, Opraco, Rafaelmrossi, Ricardo Ferreira de Oliveira, Ricvelozo, Roma6, Saulod2, Slomp, Stuckkey, Sturm, Waltercruz, Xexeo, 23 edies annimas
Prolog Fonte: http://pt.wikipedia.org/w/index.php?oldid=38635906 Contribuidores: !Silent, Adolfont, Albmont, ChristianH, Deliodavidmz, FML, Fabsoad, Fvmp, Gean, Gentiljr, Get It, Hashar,
Izabest, JMGM, Janburse, Juntas, Kleuske, Leonardo.stabile, LeonardoG, LipeFontoura, Lus Felipe Braga, Mschlindwein, Nosbig, OS2Warp, Ozymandias, PedR, Pietro Roveri, Rafael.afonso,
Ricardo Ferreira de Oliveira, Waldir, Whooligan, 88 edies annimas
Scheme Fonte: http://pt.wikipedia.org/w/index.php?oldid=38654538 Contribuidores: !Silent, FML, Fredmaranhao, Jonas AGX, Jovica, Leonardo.stabile, LeonardoG, Marcelo Reis, Mirelli
Navarra, Rafael.afonso, Ricardo Ferreira de Oliveira, Ricvelozo, TwYao, Villarinho, Waltercruz, WikiFer, 28 edies annimas
ML Fonte: http://pt.wikipedia.org/w/index.php?oldid=34609153 Contribuidores: Leonardo.stabile, Ricardo Ferreira de Oliveira, Roma6, Waldir, 4 edies annimas
AWK Fonte: http://pt.wikipedia.org/w/index.php?oldid=37299101 Contribuidores: !Silent, CommonsDelinker, Dbastro, Ebalter, FSogumo, Jonas AGX, Kaktus Kid, Leonardo.stabile,
LeonardoG, MPF-UK, Manuel Anastcio, Marcoapc, Nuno Tavares, Pmsm1100, Rafael.afonso, Rafael.alcantara.silva, Reporter, Ricardo Ferreira de Oliveira, Ricvelozo, Thiele41, Tiago de Jesus
Neves, 30 edies annimas
Ada Fonte: http://pt.wikipedia.org/w/index.php?oldid=37008116 Contribuidores: !Silent, Dbastro, Felipebarros.ti, FernandoPohl, Indech, Leonardo.stabile, LeonardoG, Lijealso, Lucasnar,
Nuno Tavares, OS2Warp, Opraco, Rafael.afonso, Rei-artur, Reporter, Reynaldo, Ricardo Ferreira de Oliveira, Rustin, Vargenau, Viniciusmc, Xexeo, 24 edies annimas
Fontes e Editores da Pgina
268
Erlang Fonte: http://pt.wikipedia.org/w/index.php?oldid=38922337 Contribuidores: !Silent, Biktora, Cigano, FSogumo, Helder.wiki, Leonardo.stabile, Neustradamus, Porantim, Ricardo
Ferreira de Oliveira, Ricvelozo, ScotXW, 12 edies annimas
Modula Fonte: http://pt.wikipedia.org/w/index.php?oldid=34927712 Contribuidores: 555, LeonardoG, Rei-artur, Xexeo
C++ Fonte: http://pt.wikipedia.org/w/index.php?oldid=38875897 Contribuidores: !Silent, 333, Adailton, Aeliazat, Alexandresk, Alexlaier, Amgauna, Antero de Quintal, Atilatt, Augusto
Reynaldo Caetano Shereiber, Banaipe, Bgazoli, Bigown, Biologo32, Br marko3, Bruno Meireles, Cesar s, Claudio Rogerio Carvalho Filho, Colaborador Z, Daemorris, Daimore, Dmelorj,
Eamaral, Euzebiod, FML, Fabiojosue, Gaf.arq, Get It, Giro720, Gughenrique, HeitorLM, Helder.wiki, Ikaro C., Ikarohuhuhu, Ikescs, Ishii, JCOlivie, JMGM, Jbribeiro1, JoaoMiranda, Jonathan
Queiroz, Jorl17, Kleiner, Lameiro, Leandrocauvilla, Leonardo.stabile, LeonardoG, LeonardoRob0t, Lgrave, Lus Felipe Braga, Marcoapc, Matheus Faria, Maxtremus, MisterSanderson,
Mschlindwein, Muriel Gottrop, Nikk5, OS2Warp, Oblita, Onjacktallcuca, Opraco, PequijanFAP, Piccilli, Rachmaninoff, Rafael.afonso, Rei-artur, Reicesar, Reynaldo, Ricardo Ferreira de
Oliveira, Ricvelozo, Rmallmann, Rodrigozanatta, Rui Silva, Ruy Pugliesi, Senhor teclado, Stuckkey, Thiagomael, Tiago.bentivegna, Tumnus, Vitor Mazuco, Waldir, Wbrito, Williamdot, rico
Jnior Wouters, 215 edies annimas
Common Lisp Fonte: http://pt.wikipedia.org/w/index.php?oldid=36179545 Contribuidores: !Silent, FML, Leonardo.stabile, Marcelo-Silva, Marcoapc, Paulo Jorge Tom, Ricardo Ferreira de
Oliveira, Vargenau, 13 edies annimas
Miranda Fonte: http://pt.wikipedia.org/w/index.php?oldid=34671927 Contribuidores: Beria, Ricardo Ferreira de Oliveira, 7 edies annimas
Eiffel Fonte: http://pt.wikipedia.org/w/index.php?oldid=38185663 Contribuidores: Ahyama, Czyyyy, Dangelo.max, Fvmp, Hgfernan, Higorrg, Izabest, Jos Roberto A. JR., Leonardo.stabile,
LeonardoG, Marcoapc, Opraco, Rachmaninoff, Rafael.afonso, Rei-artur, Ricardo Ferreira de Oliveira, Rshin, 37 edies annimas
Perl Fonte: http://pt.wikipedia.org/w/index.php?oldid=38899566 Contribuidores: !Silent, Adailton, Agil, Albmont, Alchimista, Alquimista Digital, Amgauna, Arianemoliveira, Belanidia, Beria,
Carlos Rosa, CasperBraske, Cobrettibr, CommonsDelinker, Copat, Cvalente, Dpc01, Ebalter, Espardo, FelipeAragao, Giro720, Hgfernan, IamPortuguese, Joaotg, Joenio, Jonas kam, Keplerbr,
Leonardo.stabile, LeonardoG, Macae, Malafaya, Marcoapc, Mosca, Nilsonsfj, OS2Warp, Osias, Piccilli, Poodle, Porantim, Rafael.afonso, RaphaelJubram, Ricvelozo, Rjclaudio, Rodrigo.siqueira,
Sturm, Waltercruz, Wikifriend pt001, Yone Fernandes, Zam, riobranco.dpi.ufv.br, 116 edies annimas
FL Fonte: http://pt.wikipedia.org/w/index.php?oldid=36333240 Contribuidores: J. A. S. Ferreira, Ricardo Ferreira de Oliveira, 1 edies annimas
Dylan Fonte: http://pt.wikipedia.org/w/index.php?oldid=35125266 Contribuidores: Albmont, Ricardo Ferreira de Oliveira, 1 edies annimas
Haskell Fonte: http://pt.wikipedia.org/w/index.php?oldid=37940218 Contribuidores: !Silent, Albmont, Dbastro, Dirceu Jnior, Dorivaldalbelojunior, Gbiten, Ivo Rocha, JorgePeixoto,
Juanmaiz, Lechatjaune, Leonardo.stabile, LeonardoG, Lusitana, Lus Felipe Braga, Rafael.afonso, Renancaldeira, Ricardo Ferreira de Oliveira, Rickgauden, Ricvelozo, Rodrigo Padula, Stuckkey,
Waldir, Zuke, Zumg, 52 edies annimas
Python Fonte: http://pt.wikipedia.org/w/index.php?oldid=38112495 Contribuidores: !Silent, 333, Aeroparque, Alberto Fabiano, Albmont, Alexg, Arcf br, BackstageEL, Belanidia, Bisbis,
Bmxer, Bons, Brandizzi, Brk0 0, Ccero, Daemorris, Dantadd, Dbastro, Der kenner, Diogo RBG, Diogocolla, Emersongois, Ericof, FML, FelipeVargasRigo, Fernando S. Aldado, Ferri, Fnds,
Gbiten, Girino, Helder.wiki, Holdfz, Hugo Dionizio Santos, HumbertoDiogenes, Ivanildo Filho, JMGM, Jobs1, JosemarLohn, Lameiro, Lawrence, Leonardo.stabile, LeonardoG, LeonardoRob0t,
Lijealso, Luiz Eduardo Borges, Lus Felipe Braga, Lpton, Maddox, Marcoapc, Mecanismo, Miozzo, Mvdiogo, Natashas, Nuno Tavares, Onjacktallcuca, Opraco, Patrick, PatrciaR,
PauloEduardo, Philipi, Piccilli, Pietro Roveri, Porantim, Pythonbr, Rafaelmrossi, Rei-artur, Ricardo Ferreira de Oliveira, Ricvelozo, Riverfl0w, Roberto Cruz, Sniper3000, TheVulcan, Thiago R
Ramos, Tiago de Jesus Neves, Vanthorn, Villarinho, Viniciusmc, Vitor Mazuco, Waldir, Waltercruz, Xqt, ZeroUm, 131 edies annimas
Gdel Fonte: http://pt.wikipedia.org/w/index.php?oldid=38454301 Contribuidores: Fvmp, Ricardo Ferreira de Oliveira, Ricvelozo, 1 edies annimas
Lua Fonte: http://pt.wikipedia.org/w/index.php?oldid=38788447 Contribuidores: !Silent, Antero de Quintal, Belanidia, Brmassa, Burngianecchini, Carlos-alberto-teixeira, CaroLPunk,
CommonsDelinker, Daniel Estill, Dbastro, Dermeister, Dpc01, FelipeVargasRigo, FlavioMattos, Fvmp, Gbiten, HVL, Israel77, Israel77br, Jml3, Keplerbr, Kolega2357, Leandro Guedes,
Leandromartinez, Leonardo.stabile, LeonardoG, LucianoMaia, Marcoapc, Meira, Moretti, Raphaeldantas, Ricardo Ferreira de Oliveira, Ricvelozo, Robertogerson, TheVulcan, Vanthorn,
Waltercruz, Xfalcox, Yurik, Yuu eo, 78 edies annimas
Java Fonte: http://pt.wikipedia.org/w/index.php?oldid=38565506 Contribuidores: !Silent, 191228.telemar.net.br, 200.246.143.xxx, 333, Adrianoucam, Alchimista, Alexanderps,
Alexandredinizrodrigues, Amgauna, Bertoche, Bigs, Bihaiko, Bitolado, Bjverde, Bolhones, BrunoSupremo, Brurei, Carlos-PC, Chico, Cidandrade, Claudio Rogerio Carvalho Filho, Claudomiro
Jr, Ccero, Daimore, Daniel Silverio, Dbastro, Dmendes, Dripssouza, Dudu 18, Eduacsp, EduardoCruz, Eduardofeld, Eduardoferreira, Ematsu, Espardo, EuTuga, Euproprio, FML, Feen, Fernando
S. Aldado, Fernando123d, Filosoficos, FlavioMattos, Frhakamine, Gdamasceno, George.foreman.jr, Get It, Girino, Giro720, Gladstone, HVL, Hbdbim, Helder.wiki, I32542, Italo maia, Jcmo,
Jonas AGX, Jonex, Jorge.roberto, JorgeGG, L'AngeRouge, Leitoxx, Leonardo.stabile, LeonardoG, LeonardoRob0t, Liclopes, Lijealso, Luckas Blade, Lus Felipe Braga, Manuel Anastcio,
MarcioFElias, Marcoapc, Marcobiscaro2112, Marcos Elias de Oliveira Jnior, Marcric, Math2202, Maxtremus, Meira, Mike.lifeguard, Mkasa, Mrcl, Mschlindwein, NH, Nortisop, Nuno Tavares,
OS2Warp, Onjacktallcuca, Opraco, Orlando, Osias, Ozielneto, Patrias, Paulo Eduardo Azevedo Silveira, PauloColacino, Pedro Henrique Oliveira dos santos, Pepinho, Pietro Roveri, Polonio,
Porantim, Prima.philosophia, Profvalente, Rafael.afonso, Raphael csg, Raul Caarvalho, Ricardo Caetano de Moraes, Ricardo Ferreira de Oliveira, Ricvelozo, Rising Force, Roberto Cruz, Rod,
Rodrigo Padula, Rodrigocansian, Ruy Pugliesi, Salamat, Samuel.klein, Sandr0G, Stuckkey, Tetri, Thevirus, Thiago-manel, Trakinator, Tribal, Truehalley, Tumnus, Vanthorn, Victor R12,
Villarinho, ViniGodoy, Viniciusmc, Vitor Mazuco, Waldir, Wanderson2, Wbrito, Wikifriend pt001, X spager, YuriSanCa, Zoldyick, Zuke, talo de Pontes Oliveira, , 480 edies
annimas
PHP Fonte: http://pt.wikipedia.org/w/index.php?oldid=38898587 Contribuidores: !Silent, 333, Actualmind, Adailton, Ademirfer, Agil, Alchimista, Alisson Acioli, Alppedroso, Amgauna,
Andreduartesp, Antero de Quintal, Arges, Armagedon, Batcaverna, Beto, Biktora, Brauliobh, Bruno.pedrozo, Brunoric, Cereso, ChameleonBR, ChristianH, Clara C., Daimore, Darkelder,
Darwinius, David71rj, Dbastro, Defender, Digenes Sobral, Dougsouza01, Dudu 18, Duranduran, Eamaral, Edenfall, Elementox, Emilianoeloi, Euproprio, FSogumo, Fabiobaldins, Fabiobasso,
Fabiosoaza, Felipe Pena, Felipepereira, Fernando S. Aldado, Fmy 1, Fnds, GRS73, Gabrielmsf, Gasdafantauva, Gauss, Gdamasceno, Gean, Get It, Gil mnogueira, Girino, Guilherme, Guithack,
HVL, Hahahaip, Helder.wiki, Hostbra, Ikaro C., Inerte, Inox, Ivansb, J Daglees, J Kikuchi, J0s3l1t0, Joao Junior, Joaotg, Jonas AGX, Jorl17, Juliano Caetano, Kenowlee, Keplerbr, Kinux,
Kmiksi, Ksombrah, Kulluctarus, Leonardo.stabile, LeonardoG, Leslie, Lfva.amorim, Lgrave, Lijealso, Linkprotegido, Luvittor, Lus Felipe Braga, M. B., Jr., Manuel Anastcio, Marc-Andr
Abrock, Marcoapc, Mariana Silveira Tavares, Mauriciofauth, Mecanismo, Metzen, Mschlindwein, Nuno Tavares, OS2Warp, Oalexandrino, Onjacktallcuca, Orlando, Osias, Pablodalloglio,
Patsy, PauloEduardo, Pedromerces, Pietro Roveri, Poolborges, Porantim, Prima.philosophia, Psico, RBM0407, Raafael, Rafael.afonso, Rafatz, Rei-artur, Ricardo Augustinis, Ricardo Ferreira de
Oliveira, Ricvelozo, Robertorsc, Robsjc, Rodrigo Antonioli, Rodrigoluis, Ruy Pugliesi, Ryonagana, Samorimweb, Samuelgeek, Santista1982, Santosga, Senhor teclado, Sica, Sobrinhodasilva,
Stuckkey, Surkamp, Tiagolimsan, Tiagowebmaster, Tumnus, V1d4l0k4, Villarinho, Viniciusmc, Waldir, Waltercruz, Webarthur, Wendell.souza, Wikipedista, Xicouto, 528 edies annimas
Ruby Fonte: http://pt.wikipedia.org/w/index.php?oldid=38747312 Contribuidores: !Silent, Actualmind, Andr Koehne, Betateschter, CasperBraske, Dbastro, Denommus, Diogocolla, Dirceu
Jnior, Ed.resende82, Fabiano Tatsch, Feezih, Fvmp, Gandbranco, Get It, Gfc, Goulart ed, Grillow, J0s3l1t0, JMGM, Jorge, Jose130, Kpinheiro, Lechatjaune, Leonardo.stabile, LeonardoG,
Lijealso, LonE, Lucasnar, Luiz Eduardo Borges, Lus Felipe Braga, M4c0, Marcoapc, Marcos Silva Pereira, Mecanismo, Mestre bira, Mschlindwein, Nuno Tavares, OS2Warp, Onjacktallcuca,
Opraco, Partenon, Plinio89s, Porantim, Rafael.afonso, Rbeninca, Ricardo Ferreira de Oliveira, Ricvelozo, Ruy Pugliesi, Sr X, Teles, The fabio, Tintazul, Vitorpamplona, Waltercruz, XFalcox,
Zamirvarandas, 98 edies annimas
C Fonte: http://pt.wikipedia.org/w/index.php?oldid=35979680 Contribuidores: !Silent, Ajabutres, Al28051, Alchimista, AndreHahn, Arianemoliveira, Bevis, Blamoo, Cereso,
CommonsDelinker, Daemorris, Danielalencarbr, Darwinius, Dbastro, Der kenner, DiegoBlanco, Dougsouza01, Eduacsp, Euproprio, Fmcosta, Foxfirediego, Francisco Leandro, Fbio Sold,
HVL, Hermgenes Teixeira Pinto Filho, Indech, Jorge.roberto, Laobc, Leandro.almeidaraphael, Leandro.gimenes, Leonardo.stabile, LeonardoG, Lijealso, Lmbassman, Looping, Luis ferreira86,
LuizM, Manuel Anastcio, Marciamm6, Marcoapc, Matheus Faria, Maurcio I, Mecanismo, Mike.lifeguard, Morebros, Nuno Tavares, OS2Warp, Onjacktallcuca, Opraco, Pcosmo, Porantim,
RafaAzevedo, Rafael.afonso, Rafrancoso, Reporter, Ricardo Ferreira de Oliveira, Ricvelozo, Rjclaudio, Tiagogodinho3, Victor Master, Vitor canova, Waldir, Wazms, Zoldyick, 153 edies
annimas
Clojure Fonte: http://pt.wikipedia.org/w/index.php?oldid=34997181 Contribuidores: Albmont, CommonsDelinker, Lzuliani, Marcoapc, Mateus RM, PL Przemek, Ricvelozo, ThiagoRuiz, 3
edies annimas
AspectJ Fonte: http://pt.wikipedia.org/w/index.php?oldid=36826693 Contribuidores: CommonsDelinker, Fvmp, LuanSP, Machadoae, Marcoapc, Ricardo Ferreira de Oliveira, Tiago de Jesus
Neves, Vanthorn, 4 edies annimas
Fontes, Licenas e Editores da Imagem
269
Fontes, Licenas e Editores da Imagem
Ficheiro:Charles Babbage - 1860.jpg Fonte: http://pt.wikipedia.org/w/index.php?title=Ficheiro:Charles_Babbage_-_1860.jpg Licena: Public Domain Contribuidores: Connormah,
Materialscientist
Ficheiro:Flag of the United Kingdom.svg Fonte: http://pt.wikipedia.org/w/index.php?title=Ficheiro:Flag_of_the_United_Kingdom.svg Licena: Public Domain Contribuidores: Original flag
by Acts of Union 1800SVG recreation by User:Zscout370
Ficheiro:Charles Babbage Signature.svg Fonte: http://pt.wikipedia.org/w/index.php?title=Ficheiro:Charles_Babbage_Signature.svg Licena: Public Domain Contribuidores: Charles Babbage
Ficheiro:Charles Babbage 1860.jpg Fonte: http://pt.wikipedia.org/w/index.php?title=Ficheiro:Charles_Babbage_1860.jpg Licena: Public Domain Contribuidores: Unknown staff artist for
The Illustrated London News
Ficheiro:Babbage Charles grave.jpg Fonte: http://pt.wikipedia.org/w/index.php?title=Ficheiro:Babbage_Charles_grave.jpg Licena: Public Domain Contribuidores: Astrochemist
Ficheiro:Ada lovelace.jpg Fonte: http://pt.wikipedia.org/w/index.php?title=Ficheiro:Ada_lovelace.jpg Licena: Public Domain Contribuidores: Aavindraa, Coyau, Dcoetzee, DutchHoratius,
Kaldari, Kelson, Kilom691, Michael Barera, 1 edies annimas
Imagem:Ada Lovelace color.svg Fonte: http://pt.wikipedia.org/w/index.php?title=Ficheiro:Ada_Lovelace_color.svg Licena: Creative Commons Zero Contribuidores: Original watercolor
portrait (Ada lovelace.jpg): Alfred Edward Chalon Woodcut-style graphic (Ada Lovelace.tif): Colin Adams, for the Ada Initiative SVG conversion (Ada Lovelace.svg): Fred the Oyster
Colorization: Kaldari
Ficheiro:Hollerith.jpg Fonte: http://pt.wikipedia.org/w/index.php?title=Ficheiro:Hollerith.jpg Licena: Public Domain Contribuidores: Bell, C. M. (Charles Milton), ca. 1849-1893,
photographer.
Ficheiro:Flag of the United States.svg Fonte: http://pt.wikipedia.org/w/index.php?title=Ficheiro:Flag_of_the_United_States.svg Licena: Public Domain Contribuidores: Dbenbenn,
Zscout370, Jacobolus, Indolences, Technion.
Imagem:Hollerith Herman grave.jpg Fonte: http://pt.wikipedia.org/w/index.php?title=Ficheiro:Hollerith_Herman_grave.jpg Licena: Public Domain Contribuidores: Author and original
uploader is Astrochemist at en.wikipedia
Ficheiro:Alan Turing cropped.jpg Fonte: http://pt.wikipedia.org/w/index.php?title=Ficheiro:Alan_Turing_cropped.jpg Licena: Creative Commons Attribution 2.0 Contribuidores:
Alan_Turing.jpg: Jon Callas from San Jose, USA derivative work: OS (talk)
Ficheiro:Silver - replace this image male.svg Fonte: http://pt.wikipedia.org/w/index.php?title=Ficheiro:Silver_-_replace_this_image_male.svg Licena: Public Domain Contribuidores:
Replace_this_image_male_(blue).svg: Lord Leatherface derivative work: Dove (talk)
Imagem:Flag of the United States.svg Fonte: http://pt.wikipedia.org/w/index.php?title=Ficheiro:Flag_of_the_United_States.svg Licena: Public Domain Contribuidores: Dbenbenn,
Zscout370, Jacobolus, Indolences, Technion.
Ficheiro:Konrad Zuse (1992).jpg Fonte: http://pt.wikipedia.org/w/index.php?title=Ficheiro:Konrad_Zuse_(1992).jpg Licena: GNU Free Documentation License Contribuidores: A.Savin,
GeorgHH, Gildemax, Mentifisto, RHunscher, Siebrand, Vuk, 7 edies annimas
File:Flag of Germany.svg Fonte: http://pt.wikipedia.org/w/index.php?title=Ficheiro:Flag_of_Germany.svg Licena: Public Domain Contribuidores: User:Madden, User:SKopp
Imagem:Zuse Z1-2.jpg Fonte: http://pt.wikipedia.org/w/index.php?title=Ficheiro:Zuse_Z1-2.jpg Licena: GNU Free Documentation License Contribuidores: ComputerGeek
Ficheiro:Z3 Deutsches Museum.JPG Fonte: http://pt.wikipedia.org/w/index.php?title=Ficheiro:Z3_Deutsches_Museum.JPG Licena: GNU Free Documentation License Contribuidores:
User:Teslaton
Imagem:Zuse-Z4-Totale deutsches-museum.jpg Fonte: http://pt.wikipedia.org/w/index.php?title=Ficheiro:Zuse-Z4-Totale_deutsches-museum.jpg Licena: Creative Commons Attribution 2.5
Contribuidores: Clemens PFEIFFER
Ficheiro:Colossus.jpg Fonte: http://pt.wikipedia.org/w/index.php?title=Ficheiro:Colossus.jpg Licena: Public Domain Contribuidores: Conscious, Edward, FSII, F, Hellisp, Ian Dunster,
Ibonzer, Man vyi, Mr impossible, Nixn, PKM, TedColes, 3 edies annimas
Imagem:Harvard Mark I Computer - Right Segment.JPG Fonte: http://pt.wikipedia.org/w/index.php?title=Ficheiro:Harvard_Mark_I_Computer_-_Right_Segment.JPG Licena: GNU Free
Documentation License Contribuidores: Solon, Waldir
Imagem:Two women operating ENIAC.gif Fonte: http://pt.wikipedia.org/w/index.php?title=Ficheiro:Two_women_operating_ENIAC.gif Licena: Public Domain Contribuidores: United
States Army
Imagem:Edvac.jpg Fonte: http://pt.wikipedia.org/w/index.php?title=Ficheiro:Edvac.jpg Licena: Public Domain Contribuidores: ArnoldReinhold, Infrogmation, Kersti Nebelsiek, Medium69,
Tothwolf
Ficheiro:Grace Hopper.jpg Fonte: http://pt.wikipedia.org/w/index.php?title=Ficheiro:Grace_Hopper.jpg Licena: Public Domain Contribuidores: James S. Davis
Ficheiro:Flag_of_the_United_States.svg Fonte: http://pt.wikipedia.org/w/index.php?title=Ficheiro:Flag_of_the_United_States.svg Licena: Public Domain Contribuidores: Dbenbenn,
Zscout370, Jacobolus, Indolences, Technion.
Ficheiro:Fortran acs cover.jpeg Fonte: http://pt.wikipedia.org/w/index.php?title=Ficheiro:Fortran_acs_cover.jpeg Licena: Public Domain Contribuidores: Boshomi, Closeapple
Ficheiro:IBM_704_mainframe.gif Fonte: http://pt.wikipedia.org/w/index.php?title=Ficheiro:IBM_704_mainframe.gif Licena: Attribution Contribuidores: Lawrence Livermore National
Laboratory
Ficheiro:FortranCardPROJ039.agr.jpg Fonte: http://pt.wikipedia.org/w/index.php?title=Ficheiro:FortranCardPROJ039.agr.jpg Licena: Creative Commons Attribution-Sharealike 2.5
Contribuidores: Arnold Reinhold
Ficheiro:John McCarthy Stanford.jpg Fonte: http://pt.wikipedia.org/w/index.php?title=Ficheiro:John_McCarthy_Stanford.jpg Licena: Creative Commons Attribution-Sharealike 2.0
Contribuidores: "null0"
Ficheiro:Peternaur.JPG Fonte: http://pt.wikipedia.org/w/index.php?title=Ficheiro:Peternaur.JPG Licena: Creative Commons Attribution-Sharealike 2.5 Contribuidores: Original uploader
was Eriktj at en.wikipedia
Ficheiro:Flag of Denmark.svg Fonte: http://pt.wikipedia.org/w/index.php?title=Ficheiro:Flag_of_Denmark.svg Licena: Public Domain Contribuidores: User:Madden
File:Ken_n_dennis.jpg Fonte: http://pt.wikipedia.org/w/index.php?title=Ficheiro:Ken_n_dennis.jpg Licena: Public Domain Contribuidores: 32X, Bastique, DenisKrivosheev, Ebcdic, Lzur,
Mormegil, Quibik, Reisio, Skim, Sven, 1 edies annimas
Ficheiro:APL-keybd2.svg Fonte: http://pt.wikipedia.org/w/index.php?title=Ficheiro:APL-keybd2.svg Licena: GNU Free Documentation License Contribuidores: User:Rursus
Ficheiro:Remi turtlegrafik.png Fonte: http://pt.wikipedia.org/w/index.php?title=Ficheiro:Remi_turtlegrafik.png Licena: GNU Free Documentation License Contribuidores: remi
Ficheiro:Niklaus Wirth, UrGU.jpg Fonte: http://pt.wikipedia.org/w/index.php?title=Ficheiro:Niklaus_Wirth,_UrGU.jpg Licena: Copyrighted free use Contribuidores: Thuresson, 2 edies
annimas
Ficheiro:Flag of Switzerland.svg Fonte: http://pt.wikipedia.org/w/index.php?title=Ficheiro:Flag_of_Switzerland.svg Licena: Public Domain Contribuidores: User:Marc Mongenet Credits:
User:-xfi- User:Zscout370
Ficheiro:Dennis MacAlistair Ritchie.jpg Fonte: http://pt.wikipedia.org/w/index.php?title=Ficheiro:Dennis_MacAlistair_Ritchie.jpg Licena: Public Domain Contribuidores: Medal_lg.jpeg:
Original uploader was Ems2 at en.wikipedia derivative work: Materialscientist (talk)
Imagem:Ken n dennis.jpg Fonte: http://pt.wikipedia.org/w/index.php?title=Ficheiro:Ken_n_dennis.jpg Licena: Public Domain Contribuidores: 32X, Bastique, DenisKrivosheev, Ebcdic,
Lzur, Mormegil, Quibik, Reisio, Skim, Sven, 1 edies annimas
Ficheiro:Ken n dennis.jpg Fonte: http://pt.wikipedia.org/w/index.php?title=Ficheiro:Ken_n_dennis.jpg Licena: Public Domain Contribuidores: 32X, Bastique, DenisKrivosheev, Ebcdic,
Lzur, Mormegil, Quibik, Reisio, Skim, Sven, 1 edies annimas
Ficheiro:Ada Lovelace 1838.jpg Fonte: http://pt.wikipedia.org/w/index.php?title=Ficheiro:Ada_Lovelace_1838.jpg Licena: Public Domain Contribuidores: Dcoetzee, Deadstar, Ecummenic,
Erik Baas, Gene.arboit, Herbythyme, Hsarrazin, Kaldari, Kilom691, ManuelGR, PMG, Pierpao, Poolio Bluxo, SarahStierch, Seanturvey, SterkeBak, Thuresson, Vonvon, 6 edies annimas
Imagem:Lambda lc.svg Fonte: http://pt.wikipedia.org/w/index.php?title=Ficheiro:Lambda_lc.svg Licena: Public Domain Contribuidores: Cathy Richards, Luks, Vlsergey, 2 edies
annimas
Imagem:AlleAlle 2.jpg Fonte: http://pt.wikipedia.org/w/index.php?title=Ficheiro:AlleAlle_2.jpg Licena: GNU Free Documentation License Contribuidores: GeorgHH, Michael Haferkamp,
Rooivalk
Fontes, Licenas e Editores da Imagem
270
Ficheiro:Erlang logo.png Fonte: http://pt.wikipedia.org/w/index.php?title=Ficheiro:Erlang_logo.png Licena: Trademarked Contribuidores: Butko, Kyro, WikipediaMaster, 3 edies
annimas
File:LYME_software_bundle.svg Fonte: http://pt.wikipedia.org/w/index.php?title=Ficheiro:LYME_software_bundle.svg Licena: Creative Commons Attribution-Sharealike 3.0
Contribuidores: User:ScotXW
Ficheiro:Hello World C++.png Fonte: http://pt.wikipedia.org/w/index.php?title=Ficheiro:Hello_World_C++.png Licena: Creative Commons Zero Contribuidores: User:Kleiner
Ficheiro:Stroustrup kent state edit.jpg Fonte: http://pt.wikipedia.org/w/index.php?title=Ficheiro:Stroustrup_kent_state_edit.jpg Licena: Creative Commons Attribution 3.0 Contribuidores:
TheTrueAPlus (cropped by Matt.a.w.)
Imagem:cquote1.svg Fonte: http://pt.wikipedia.org/w/index.php?title=Ficheiro:Cquote1.svg Licena: Public Domain Contribuidores: Adambro, Editor at Large, Infrogmation, Jianhui67, P
96glin, Waldir, 4 edies annimas
Imagem:cquote2.svg Fonte: http://pt.wikipedia.org/w/index.php?title=Ficheiro:Cquote2.svg Licena: Public Domain Contribuidores: Editor at Large, Infrogmation, Waldir, 1 edies
annimas
Imagem:Yes check.svg Fonte: http://pt.wikipedia.org/w/index.php?title=Ficheiro:Yes_check.svg Licena: Public Domain Contribuidores: SVG by (modified by )
Imagem:X mark.svg Fonte: http://pt.wikipedia.org/w/index.php?title=Ficheiro:X_mark.svg Licena: Public Domain Contribuidores: User:Gmaxwell
Imagem:Portal.svg Fonte: http://pt.wikipedia.org/w/index.php?title=Ficheiro:Portal.svg Licena: Creative Commons Attribution-ShareAlike 3.0 Unported Contribuidores: Portal.svg: Pepetps
derivative work: Bitplane (talk)
Imagem:Lorenz attractor.svg Fonte: http://pt.wikipedia.org/w/index.php?title=Ficheiro:Lorenz_attractor.svg Licena: Creative Commons Attribution-ShareAlike 3.0 Unported
Contribuidores: User:Dschwen
Ficheiro:Haskell-Logo.svg Fonte: http://pt.wikipedia.org/w/index.php?title=Ficheiro:Haskell-Logo.svg Licena: Public Domain Contribuidores: Thought up by Darrin Thompson and
produced by Jeff Wheeler
Imagem:Python logo.svg Fonte: http://pt.wikipedia.org/w/index.php?title=Ficheiro:Python_logo.svg Licena: desconhecido Contribuidores: -
Imagem:He invented Python.jpg Fonte: http://pt.wikipedia.org/w/index.php?title=Ficheiro:He_invented_Python.jpg Licena: Creative Commons Attribution 2.0 Contribuidores: FlickrLickr,
FlickreviewR, Legoktm, Michael Reschke, Red Rooster
Imagem:Python script.svg Fonte: http://pt.wikipedia.org/w/index.php?title=Ficheiro:Python_script.svg Licena: desconhecido Contribuidores: Ae, Bibi Saint-Pol
Imagem:Lua-logo-nolabel.svg Fonte: http://pt.wikipedia.org/w/index.php?title=Ficheiro:Lua-logo-nolabel.svg Licena: Public Domain Contribuidores: AnonMoos, Franois Melchior, Iketsi,
Kephir, Leyo, Moogsi, Qgil, Rezonansowy
Imagem:Wave.svg Fonte: http://pt.wikipedia.org/w/index.php?title=Ficheiro:Wave.svg Licena: desconhecido Contribuidores: sbmehta converted to SVG from Sun Microsystems AI version.
Imagem:Helloworldjava.jpg Fonte: http://pt.wikipedia.org/w/index.php?title=Ficheiro:Helloworldjava.jpg Licena: Public Domain Contribuidores: talo de Pontes Oliveira
Imagem:PHP-logo.svg Fonte: http://pt.wikipedia.org/w/index.php?title=Ficheiro:PHP-logo.svg Licena: Public Domain Contribuidores: Biktora, Chealer, Pixewakb, 1 edies annimas
Imagem:Ruby logo.svg Fonte: http://pt.wikipedia.org/w/index.php?title=Ficheiro:Ruby_logo.svg Licena: Creative Commons Attribution-Sharealike 2.5 Contribuidores: Yukihiro Matsumoto,
Ruby Visual Identity Team
Imagem:Yukihiro Matsumoto.JPG Fonte: http://pt.wikipedia.org/w/index.php?title=Ficheiro:Yukihiro_Matsumoto.JPG Licena: Public Domain Contribuidores: Cep21
Ficheiro:Clojure-glyph.svg Fonte: http://pt.wikipedia.org/w/index.php?title=Ficheiro:Clojure-glyph.svg Licena: desconhecido Contribuidores: Tom Hickey and Rich Hickey
Licena
271
Licena
Creative Commons Attribution-Share Alike 3.0
//creativecommons.org/licenses/by-sa/3.0/