Self (linguagem de programação)
Self é uma linguagem de programação orientada a objeto , com base no conceito de prototipagem. Foi usada principalmente como um sistema de teste experimental para o projeto de linguagens nos anos 1980 e 1990. Em 2006, Self ainda estava sendo desenvolvida como parte do projeto Klein, que era uma máquina virtual Self escrita inteiramente em Self. A última versão principal é a 4.3, que foi lançada em julho de 2006. Em 2007, o projeto Klein deixou de estar ativo.
Self | |
---|---|
Paradigma | orientação a objeto |
Surgido em | 1986 |
Última versão | 4.5.0 (12 de janeiro de 2014) |
Criado por | David Ungar, Randall Smith |
Estilo de tipagem | forte, dinâmica |
Influenciada por | Smalltalk |
Influenciou | NewtonScript, JavaScript, Io, Cel, Agora, Squeak, Lisaac, Lua, Factor, REBOL |
Página oficial | selflanguage.org |
Várias técnicas de compilação just-in-time foram pioneiras ou melhoradas na pesquisa da linguagem Self pois estas eram necessárias para se permitir linguagem orientada a objetos de nível bastante elevado para executar até a metade da velocidade de um código C otimizado. Estas técnicas foram implantadas depois na máquina virtual HotSpot da linguagem de programação Java.
História
editarSelf foi projetada principalmente por David Ungar e Randall Smith, em 1986, enquanto trabalhavam na Xerox PARC. O seu objetivo era fazer avançar o estado da arte em pesquisa de linguagem de programação orientada a objeto, uma vez que a Smalltalk-80 fora lançada pelos laboratórios e havia começado a ser levada a sério pela indústria. Eles se mudaram para a Universidade de Stanford e continuaram a trabalhar sobre a linguagem, construindo o primeiro compilador Self funcional em 1987. Nesse ponto, o foco mudou para tentar se trazer todo um sistema para a Self, e não somente a linguagem.
A primeira versão pública foi lançada em 1990, e no ano seguinte a equipe desenvolvedora se mudou para a Sun Microsystems onde continuou a trabalhar na linguagem. Vários novas versões se seguiram, até ficar em grande parte adormecida, em 1995, na versão 4.0. A versão mais recente, 4.3, foi lançada em 2006 e roda em Mac OS X e Solaris. A nova versão está sendo desenvolvida para Mac OS X e Linux por um grupo de programadores independentes, que levou o projeto alguns meses atrás, e eles estão prestes a lançar uma versão 4.4 que agora está na fase de beta 4.
Self também inspirou uma série de linguagens baseadas em seus conceitos. Mais notável, talvez, foi a linguagem NewtonScript para o Apple Newton e a linguagem JavaScript utilizada principalmente para páginas da web dinâmicas em todos os navegadores modernos, e mais recentemente em servidores utilizando o ambiente node. Outros exemplos incluem a Io, a Cel, a Lisaac e a Agora. O sistema de objetos distribuídos da IBM Tivoli Framework, desenvolvido em 1990, foi, no nível mais baixo, um protótipo de sistema baseados em objetos inspirado pela Self.
Linguagens de programação baseadas em protótipos
editarLinguagens tradicionais OO baseada em classe se baseiam em uma dualidade arraigada:
- Classes definem as qualidades básicas e os comportamentos dos objetos.
- Instâncias de objetos são manifestações particulares de uma classe.
Por exemplo, suponha que os objetos da classe Veiculo
tem um nome e a capacidade de realizar várias ações, tais como dirigir ao trabalho e entregar materiais de construção. Carro de João
é uma instância particular (objeto) da classe Veiculo
com o nome "Carro de João". Em teoria, pode-se então enviar uma mensagem para Carro de João
, dizendo a ele para entregar materiais de construção.
Este exemplo mostra um dos problemas com esta abordagem: o carro de Bob, é um carro desportivo, e, portanto, não deveria ser capaz de transportar e entregar materiais de construção (em qualquer sentido), mas esta é uma função que Veículos
foram modelados para ter. Um modelo mais útil resulta da utilização de subclassing para criar especializações de Veículos
; por exemplo Carros esporte
e Caminhão aberto
. Somente objetos da classe Caminhão aberto
precisam fornecer um mecanismo para entrega de materiais de construção; carros esporte, que são mal adaptados para esse tipo de trabalho, só precisam andar rápido. No entanto, este modelo mais a fundo requer maior perspicácia, que só surge a medida que os problemas aparecem.
Esta questão é um dos fatores que motivam protótipos. A menos que se possa prever com certeza quais as qualidades um conjunto de objetos e classes terão no futuro distante, não se pode criar uma hierarquia de classe adequadamente. Muito frequentemente o programa acabaria por ter necessidade adicional de comportamentos, e as seções do sistema teriam de ser re-projetadas (ou refatoradas) para quebrar os objetos de uma forma diferente.
Em Self, e outras linguagens baseadas em protótipos, a dualidade entre as classes e instâncias de objeto é eliminada. Em vez de ter uma "instância" de um objeto que é baseado em alguma "classe", em Self se faz uma cópia de um objeto existente, e se efetua mudanças nela. Então carro de Bob seria criado como uma cópia de um objeto "veículo" existente e, em seguida adicionando-se o método dirigir mais rápido, modelando o fato de que ocorre ser um Porsche 911. Objetos básicos que são usados principalmente para fazer cópias são conhecidos como protótipos. Esta técnica é reivindica simplificar bastante o dinamismo. Se um objeto existente (ou conjunto de objetos) prova ser um modelo inadequado, um programador pode simplesmente criar um objeto modificado com o comportamento correto, e utilizá-lo. Códigos que usam os objetos existentes não são alterados.
Descrição da linguagem
editarObjetos Self são um conjunto de "slots". Slots são métodos de acesso que retornam valores, e colocando dois pontos (":") após o nome de um slot se define o seu valor. Por exemplo, um slot chamado "nome",
myPerson nome
retorna o valor em nome, e
myPerson nome:'foo'
o define.
Self, como Smalltalk, usa blocos para o controle de fluxo e outras funções. Métodos são objetos que contêm código, além de slots (que usam de argumentos e valores temporários), e podem ser colocados em um slot Self, tal como qualquer outro objeto: um número, por exemplo. A sintaxe é a mesma nos dois casos.
Note que não há distinção em Self entre campos e métodos: tudo é um slot. Uma vez que acessar slots através de mensagens constitui a maioria da sintaxe em Self, muitas mensagens são enviadas para "self", e "self" pode ser deixado de fora (daí o nome).
Sintaxe básica
editarA sintaxe para acessar slots é semelhante à de Smalltalk. Três tipos de mensagens estão disponíveis:
- unária
receiver slot_name
- binária
receiver + argument
- palavra chave
receiver keyword: arg1 With: arg2
Todas as mensagens retornam resultados, de modo que o receptor (se houver) e os argumentos podem ser eles mesmas o resultado de outras mensagens. Seguir uma mensagem por um ponto (".") significa que Self irá descartar o valor retornado. Por exemplo:
'Alô, Mundo!' print.
Esta é a versão Self do programa Alô mundo. A sintaxe '
indica um objeto string literal. Outros literais incluem números, blocos e objetos em geral.
Agrupamentos podem ser forçados usando-se parênteses. Na ausência de agrupamentos explícitos, as mensagens unárias são considerados como tendo a precedência mais alta seguido pelas binárias (agrupando da esquerda para a direita) e as palavras-chave com os mais baixos. O uso de palavras-chave para a atribuição levaria a alguns parênteses extras, onde expressões também teriam mensagens-chave, de modo a evitar que Self exigisse que a primeira parte de uma nova mensagem de palavra-chave seletora iniciasse com uma letra minúscula, e suas partes posteriores começassem com uma letra maiúscula.
Ver também
editar- Cecil (linguagem de programação)
- Smalltalk
- Io (linguagem de programação)
- Linguagem de programação NewtonScript
- Linguagem de programação JavaScript
- Linguagem de programação Lisaac
- Lua (linguagem de programação)
Ligações externas
editar- Artigos publicados sobre Self
- Página oficial Self
- Página oficial Self na Sun Microsystems
- Fonte Alternativa de trabalhos sobre Self da UCSB (espelho para a página de jornais Sun)
- Recursos Self no Cetus Links
- Projecto Merlin
- Self portado para Linux (sem muitas das otimizações)
- Página de Gordon sobre Self
- Video demonstrando self
- dSelf: distributed extension to the delegation and language SELF