Original Article: Perl & Linguistics
Author: Steven W. McDougall

Perl e Lingüística

Larry Wall é o autor de Perl. Ele tem experiência em lingüística e traz uma perspectiva interessante para o design do idioma.
Sujeito:      Re: Lingüística e Perl?
De:         [email protected] (Larry Wall)
Data:         1995/07/27
Organização: NetLabs, Inc., Los Altos, California.
Newsgroups:   comp.lang.perl.misc

Thomas Dunbar  <[email protected]> escreveu:
: Nos slides de Larry Wall em uma reunião da VHLL, há alguns
: alusões muito interessantes a características / considerações linguísticas
: em Perl (especialmente o slide "Natural Language Concepts"). é isto
: expandido em qualquer lugar? Especialmente relacionado a Perl, mas também
: linguagens de programação em geral?
Na verdade não, mas posso expandi-lo um pouco aqui.

Aprenda uma vez, use várias vezes

Você aprende um idioma natural uma vez e usa-o muitas vezes. A lição para um designer de linguagem é que um idioma deve ser otimizado para o poder expressivo e não para facilitar a aprendizagem. É fácil aprender a dirigir um carrinho de golfe, mas é difícil se expressar em um.

Saiba como você vá

Você não aprende uma linguagem natural mesmo uma vez, no sentido de que você nunca deixa de aprender. Ninguém conheceu completamente qualquer linguagem natural. Infelizmente, no interesse da ortogonalidade, muitas linguagens de computador são projetadas para que todos os graus de liberdade (dimensão) estejam disponíveis em todos os lugares. Isso tem seus bons pontos se você entender o idioma inteiro, mas pode levar a confusão se você não fizer isso. Você gostaria de ignorar algumas das dimensões para começar. Você gostaria de conversar conversar com o bebê e ser entendido. Está certo se um idioma é difícil de aprender, desde que você não precise aprender tudo ao mesmo tempo.

Muitos níveis aceitáveis de competência

Isto é mais uma característica sociológica, em comparação com "aprender como você vai", que é uma característica psicológica. As pessoas não se importam se você fala um subconjunto de uma linguagem natural, especialmente se você é uma criança ou um estrangeiro. (Excepto em Paris, é claro.) Se um idioma foi projetado para que você possa "aprender como você vá", então a expectativa é que todos estejam aprendendo e está tudo bem.

Várias maneiras de dizer o mesmo

Este é mais uma característica antropológica. As pessoas não só aprendem como vão, mas vêm de origens diferentes e aprenderão um subconjunto diferente da língua primeiro. É oficialmente aprovado no domínio Perl para programar no subconjunto de Perl correspondente a sed, ou awk, ou C, ou shell, ou BASIC, ou Lisp, ou Python. Ou FORTRAN, mesmo. Só porque Perl é o caldeirão de linguagens de computador não significa que você tenha que mexer.

Não há vergonha no empréstimo

Em inglês (e outras línguas que não sofrem uma crise de identidade), as pessoas não se importam em passar das idéias de outras línguas e torná-las parte do idioma. Os esforços para manter a "pureza" de uma linguagem (natural ou artificial) só conseguem estabelecer uma classe de elite de pessoas que conhecem os shibboleths. As pessoas comuns sabem melhor, mesmo que não saibam o que significa "shibboleth".

Dimensionalidade indeterminada

Os cientistas gostam de ser capazes de localizar as coisas, dando um "vetor", ou seja, uma lista de coordenadas em um espaço de dimensionalidade conhecida. Esta é uma das razões pelas quais eles gostam de ortogonalidade - significa que os vários componentes do vetor são independentes uns dos outros. Infelizmente, o mundo real geralmente não está configurado para funcionar desse jeito. A maioria dos problemas, incluindo os problemas de linguística, são uma questão de "ir de lá para lá", e a geografia intermediária tem uma forte influência sobre quais soluções são práticas. Os problemas tendem a ser resolvidos em vários níveis. Uma viagem típica pode envolver suas pernas, seu carro, uma escada rolante, uma calçada móvel, um jato, talvez algumas calçadas mais moventes ou um bonde, outro jato, um táxi e um elevador. Em cada um desses níveis, não há muitos "ângulos retos", e o todo é um pouco de natureza fractal. Em termos de linguagem, você diz algo que se aproxima do que você quer dizer, e então você começa a refiná-lo em torno das bordas, assim como você planejaria primeiro o seu itinerário entre os principais aeroportos, e depois se preocuparia mais com a forma de chegar e do aeroporto.

A ambigüidade local está bem

As pessoas prosperam em ambiguidade, desde que sejam rapidamente resolvidas. Geralmente, dentro de uma linguagem natural, a ambiguidade é resolvida rapidamente usando palavras e tópicos falados recentemente. Os pronomes como "ele" referem-se a coisas próximas, de forma sintaticamente falante. Perl está cheio de poucas ambiguidades que as pessoas nunca percebem porque são resolvidas tão rapidamente. Por exemplo, muitos termos e operadores no Perl começam com caracteres idênticos. Perl resolve-los com base em se está esperando ver um termo ou um operador, assim como uma pessoa faria. Se você diz 1 & 2, sabe que o & É um bitwise AND, mas se você diz &foo, sabe que você está chamando de sub-rotina foo.

Em contraste, muitas linguagens fortemente tipadas têm ambigüidade "distante". C ++ é um dos piores neste aspecto, porque você pode olhar para a + b e não tenho idéia do que o + is doing, muito menos, onde é definido. Nós enviamos pessoas para a pós-graduação para aprender a resolver ambigüidades distantes.

Pontuação por prosódia e inflexão

O idioma natural é naturalmente pontuado pelos arremessos, estresses e pausas que usamos para indicar como as palavras estão relacionadas. O chamado "linguagem corporal" também entra em jogo aqui Alguns desta pontuação é escrita em inglês, mas grande parte disso não é - ou é apenas aproximada. A tendência nas recentes comunicações eletrônicas tem sido inventar várias formas de pontuação. :-)

Alguns designers de linguagem computacional parecem pensar que a pontuação é má; Duvido que seus professores de inglês concordem.

Desambiguação por número, caso e palavra

Parte do motivo pelo qual uma língua pode fugir com certas ambiguidades locais é que outras ambiguidades são suprimidas por vários mecanismos. O inglês usa o número e a ordem das palavras, com vestígios de um sistema de casos nos pronomes: "O homem olhou para os homens, e eles olharam para ele." É perfeitamente claro nessa frase quem está fazendo o que a quem. Da mesma forma, Perl possui marcadores numéricos em seus substantivos; isso é, $dog e um cachorro e @dog e (potencialmente) muitos. assim $ and @ são um pouco como "isto" e "estes" em inglês. Perl também usa a ordem das palavras: subutilização significa algo bem diferente de use sub. Perl não faz muito com distinções de casos, ao contrário das conchas, que fazem uso de distinções de menções $ prefixo. Embora eu suponha que se você permitir isso, você poderia contar as citações de Perl como uma forma de marcador de caso. Em um nível um pouco mais abstruso, Perl 5's \ o operador é um tipo de marcador ou préposição indicando menção em vez de usar. Mas, como acontece com a maioria das linguagens de computador, as noções pré-posicionais geralmente são expressas por posição dentro de uma lista de argumentos. (Embora seja certamente possível escrever chamadas usando parâmetros nomeados em Perl, e as chaves de hashes às vezes funcionam como preposições.)
move $rook from => $qr_pos, to => "kb3";

Topicalização

No que diz respeito à topicalização, devo ressaltar que esta frase começa com uma. Um topicalizer simplesmente apresenta o assunto que você pretende falar. Existem várias formas sintáticas em inglês, a mais simples é simplesmente um substantivo: "Cenouras, eu as odeio". Pascal tem uma cláusula "com" que funciona como um topicalizador. Os tópicos podem às vezes dar uma lista de tópicos, em que ponto você vê palavras como "para BLAH e BLAH, faça BLAH". Em Perl, existem várias coisas que funcionam como topicalizantes. Você pode dizer
foreach (@dog) { print $_ }
Isso pode até ser usado singularmente:
for ($some_long_name) { s/foo/bar/g; tr/a-z/A-Z/; print; }
As correspondências de padrões (e, de qualquer forma, os condicionais) tendem a funcionar como topicalizadores em Perl:
/^Subject: (.*)/ and print $1;

Estrutura discursiva

A estrutura do discurso é como um enunciado maior que uma frase é montado. Diferentes idiomas e culturas têm regras diferentes sobre como contar uma piada ou uma história, por exemplo, ou como escrever um livro sobre Perl. Algumas linguas de computador têm regras bastante fixas para estruturas maiores. COBOL e Pascal vêm à mente. Perl tende a ser bastante livre sobre a ordem em que você coloca suas declarações, exceto que é bastante aristotélico exigir que você forneça um início e fim explícitos para estruturas maiores, usando curlies. Mas você quase poderia reivindicar isso #!/usr/bin/perl corresponde a "Era uma vez", enquanto __END__ significa "E eles viveram felizes para sempre."

Pronominalização

Todos sabemos sobre pronomes e seus usos. Existem vários pronomes em Perl: $_ means "it", and @_ tende a significar "eles". (Mas $1, $2 etc. também são referências pronominal de volta às substrings antecedentes na última combinação de padrões, que mencionamos podem funcionar como topicalizadores.) Dentro de um loop foreach ou grep, $_ não é apenas uma cópia do item em questão, mas um alias para isso. similarmente, @_ e uma lista de referências aos argumentos da função e os argumentos podem ser modificados alterando elementos de @_.

Nenhum eixo teórico para moer

As línguas naturais são usadas por pessoas que, na maior parte, não se quebram o quão elegante é o design da sua língua. Exceto por alguns escritores que se esforçam para fazer um ponto da maneira mais eficiente possível, pessoas comuns dispersam todo tipo de redundância ao longo de sua comunicação para se certificar de serem entendidas. Eles usam o que as palavras chegam à mão para entender o seu objetivo, e trabalham até ele baterem até a morte. Normalmente, isso não é um problema. Eles estão bastante dispostos a aprender uma nova palavra de vez em quando, se perceberem que será útil, mas ao contrário de advogados ou cientistas da computação, eles sentem pouca necessidade de definir muitas palavras novas antes de dizer o que querem dizer.

Em termos de linguagens de computador, isso argumenta para predefinir os conceitos comumente usados para que as pessoas não sintam a necessidade de fazer tantas definições. Alguns scripts Perl não contêm nenhuma definição. Eu desafio você a encontrar um programa C ++ sem uma definição.

Estilo não aplicado, exceto pela pressão dos pares

Nós não todos temos que escrever como Faulkner, ou programar como Dijkstra. Congratulo-me dizer às pessoas o que é meu estilo de programação, e até mesmo lhes direi onde acho que seu próprio estilo não é claro ou me faz passar por aros mentais. Mas eu faço isso como um programador companheiro, não como o deus Perl. Alguns designers de idiomas esperam reforçar o estilo através de vários meios tipográficos, como forçar (mais ou menos) uma declaração por linha. Tudo isso é muito bom para a poesia, mas não acho que eu queira forçar todos a escrever poesia em Perl. Tais limites estilísticos devem ser auto-impostos ou, na maioria, policiados por consenso entre seus amigos.

Design cooperativo

Ninguém projeta uma linguagem natural por si só, a menos que seu nome seja Tolkien. Todos contribuímos para o design do nosso idioma pelo nosso empréstimo e nossas cédulas, copiando o que pensamos ser legal e evitando o que pensamos que é ofuscante. As melhores linguagens artificiais são colaborações - mesmo com um idioma como Perl, onde uma pessoa parece estar a cargo dela. A maioria das boas ideias de Perl não eram originais comigo. Alguns deles vieram de outras línguas, e algumas delas foram sugestões feitas por várias pessoas à medida que avançávamos. Se você considerar o idioma para incluir as várias armadilhas culturais (bibliotecas, diretórios de lixeira) que acompanham o idioma, mesmo idiomas como C, ou Ada, ou C ++, ou mesmo os shells Unix são colaborações por muitas, muitas pessoas. Perl não é uma exceção disso.

"Inevitable "Divergência

Como um idioma é projetado por muitas pessoas, qualquer linguagem inevitavelmente diverge em dialetos. Pode ser possível atrasar isso, mas para qualquer idioma vivo, as forças de divergência são quase sempre mais fortes do que as forças de convergência. O POSIX tentou unificar o Sistema V e o BSD, e assim que juntaram as coisas naquela dimensão, o número de variantes do Unix explodiu em várias outras dimensões. A lição para um designer de linguagem é construir mecanismos explícitos para que seja fácil identificar qual variante do idioma está sendo tratada. O Perl 5 possui um mecanismo de extensão explícito para o qual você especifica, usando cláusulas de "uso", quais tipos de semântica ou "dialetos" especiais que você vai confiar. Perl 4 não teve isso, e houve uma pressão muito maior para colocar várias coisas na linguagem que não pertencia ao idioma principal. Esperemos que agora possamos estabilizar Perl "básico" para que haja menos necessidade de inventar orner, sybperl, isqlperl, etc.

Espero que você ache isso útil.

Larry