Definição precisa é difícil
- Mas elas tem um conjunto de características em comum
Uso em batch ou interativo
- Ler o programa fonte (script) linha por linha
- Rexx, Python, Tcl, Guile, Ruby
- Notável exceção: Perl (insiste em ler todo o código antes)
\pause Expressividade
- Suportar o rápido desenvolvimento e uso interativo
- Pouco código para fazer coisas simples → expressividade
- Abordagens
- Uso forte de pontuação e identificadores curtos (Perl)
- English-like, várias palavras e pouca pontuação
- Evitar declarações extensivas, estrutura complexa
Exemplos Hello World de (ou falta de) economia de expressão
Java
class Hello {
public static void main (String[] args) {
System.out.println ("Hello, world!");
}
}
\pause Ada
with ada.text_IO; use ada.text_IO;
procedure hello is
begin
put_line ("Hello, world!");
end hello;
\pause Perl, Python, Ruby (Linguagens de script)
print "Hello, world!\n"
Inexistência de declarações, regras de escopo simples
- Tudo é global por default (Perl)
- Declarações opcionais limitam para um escopo aninhado
- Tudo é local por default (PHP, Tcl, …)
- Globais devem ser importadas explicitamente
- Em Python
- Atribuição define o escopo
- Sintaxe especial para atribuir para variável de outro escopo
Tipagem dinâmica flexível
- Checagem imediatamente antes do uso (PHP, Python, ..)
- Interpretação de acordo com contexto (Rexx, Perl, Tcl)
- Exemplo em perl
$a = "4"; print $a . 3 . "\n"; print $a + 3 . "\n";
- \pause Parecido com coerção (sem a noção de um tipo “natural”)
- \pause Linguagens sem tipo → Ousterhout’s Plot (Figure 1)
- Exemplo em Tcl
\scriptsize
button .b -text Hello! -font {Times 16} -command {puts hello}
- Exemplo em Tcl
\scriptsize
\pause Acesso fácil a chamadas de sistema
- Muito mais suporte que linguagens tradicionais
- Perl tem mais de 100 comandos embutidos para acessar sistema
Casamento de padrões e manipulação de strings
- Expressões regulares estendidas (regexp)
\pause Estruturas de dados de alto nível
- Conjuntos, dicionários, listas, tuplas
- \pause No caso de Perl, faz parte da sintaxe de nomes ($ @ #)
Mudanças rápidas no desenvolvimento de LPs
- Linguagens de script
\pause Várias razões para esse enfoque
- Dinamismo da comunidade de código aberto
- Baixo investimento para criar uma nova linguagem
\pause Linguagens de script incorporam novidades recentes
- Exemplo com Ruby
- Modelo uniforme de objetos (parecido com Smalltalk)
- Iteradores (Clu)
- Atribuição de múltiplos caminhos
- Tratador de exceção estruturado
- Reflexão
- Python
- Funções anônimas de primeira classe
- Listas (list comprehensions) no estilo de Haskell