Io é uma linguagem de programação pura e orientada a objetos de linguagem de programação, inspirada por Smalltalk, Auto, Lua, Lisp act2 e NewtonScript. A linguagem foi criada por Steve Dekorte em 2002, após tentar ajudar um amigo, Dru Nelson, com sua linguagem, Cel. Ele descobriu que ele realmente não sabia muito sobre como as línguas funcionou, e começou a escrever uma linguagem pequena para entender os problemas melhor Io. Io possui uma baseada em protótipo com modelo de objeto semelhante as Auto e NewtonScript, eliminando a distinção entre instância e classe. Como o Smalltalk tudo é um objeto e utiliza tipagem dinâmica, como o Lisp os programas são apenas arvores de dados, já Io usa atores para a simultaneidade. A linguagem foi criada em 2002 e desenvolvida ativamente até 2008.
As características mais marcantes de Io são seu tamanho mínimo e abertura ao uso de recursos de códigos externos, a linguagem de programação Io é executada por uma pequena portátil máquina virtual.
Algumas características do Io.
- Pure orientada a objetos com base em protótipos
- Code-de-data / homoiconic
- Avaliação preguiçosa dos parâmetros da função funções de ordem superior
- Introspecção, reflexão e metaprogramming
- Baseada Ator concorrência coroutines
- Manipulação de exceção
- Incremental de recolha de lixo de suporte ligações fracas altamente portátil
- DLL / biblioteca compartilhada carregamento dinâmico na maioria das plataformas
- Pequena máquina virtual
A filosofia do Io tem o objetivo de explorar a unificação conceitual e linguagens dinâmicas, então as vantagens e desvantagens tendem a favorecer a simplicidade e flexibilidade sobre o desempenho.
O Io possui duas maneiras de criação de funções anônimas são eles métodos e blocos, eles são quase idênticos, exceto para o escopo. Enquanto o blocos possui âmbito lexical, o métodos possui um alcance dinâmico.
A sua sintaxe na sua forma mais simples, é composto por um único identificador: doStuff
Assumindo que o doStuff acima é um método, ele está sendo chamado com zero argumentos e, como resultado, parênteses explícitos não são necessários. Se doStuff tinha argumentos, ele ficaria assim: doStuff(42)
Io é uma passagem de mensagens linguagem, e como tudo na Io é uma mensagem (excluindo comentários), cada mensagem é enviada para um receptor. O exemplo acima demonstra isso muito bem, mas não totalmente. Para descrever melhor este ponto, vamos olhar para o exemplo a seguir: System version
O exemplo acima demonstra a passagem de mensagens em Io; a mensagem “versão” é enviado para o objeto “System”.
Os operadores são um caso especial em que a sintaxe não é como cortar-e-seca como os exemplos acima. O Io analisador intercepta um conjunto de operadores definidos pelo intérprete, e traduzi-lo para chamadas de método. Por exemplo, o seguinte: 1 + 5 * 8 + 1
se traduz em: 1 + (5 *(8)) +(1)
Como você pode ver, há também um pouco de precedência do operador acontecendo aqui, e os níveis de precedência são o mesmo que com os níveis C precedência.
Operadores também foram transformadas em chamadas de método. Na verdade, todos os operadores Io são métodos; o fato de que eles não exigem parênteses explícitos é uma conveniência.