Um roteirista de coração

Qual é a diferença entre uma linguagem de programação e uma linguagem de script? Existe alguma diferença? O épico de Larry Wall Programar é difícil, vamos criar scripts tenta examinar o cenário de scripts e identificar pontos em comum.

Quando o senhor vai até as chamadas tribos primitivas e analisa suas linguagens, descobre que, estruturalmente, elas são tão complexas quanto qualquer outra linguagem humana. Basicamente, o senhor pode dizer praticamente qualquer coisa em qualquer linguagem humana, se trabalhar nela por tempo suficiente. As linguagens humanas são, por assim dizer, Turing completas.

Portanto, as línguas humanas diferem não tanto no que o senhor pode dizer, mas no que deve dizer. Em inglês, o senhor é obrigado a diferenciar o singular do plural. Em japonês, não é preciso distinguir o singular do plural, mas é preciso escolher um nível específico de polidez, levando em conta não apenas o grau de respeito pela pessoa com quem se está falando, mas também o grau de respeito pela pessoa ou coisa sobre a qual se está falando.

Portanto, os idiomas diferem quanto ao que o senhor é obrigado a dizer. Obviamente, se o seu idioma o obriga a dizer algo, o senhor não pode ser conciso nessa dimensão específica usando o seu idioma. O que nos leva de volta ao scripting.

Quantas maneiras existem para que diferentes linguagens de script sejam concisas?

Quantas receitas de borscht existem na Rússia?

Larry destaca os seguintes eixos de design de linguagem em sua pesquisa:

  1. Vinculação: Early or Late?
  2. Expedição: Único ou múltiplo?
  3. Avaliação: Ansioso ou preguiçoso?
  4. Tipologia: Eager or Lazy?
  5. Estruturas: Limitadas ou ricas?
  6. Simbólico ou prolixo?
  7. Tempo de compilação ou tempo de execução?
  8. Declaracional ou operacional?
  9. Classes: Imutáveis ou mutáveis?
  10. Baseado em classe ou baseado em protótipo?
  11. Dados passivos, consistência global ou dados ativos, consistência local?
  12. Encapsulamento: por classe? por tempo? por construções do sistema operacional? por elementos da GUI?
  13. Escopo: Sintático, semântico ou pragmático?

É difícil falar sobre Larry Wall sem mencionar que o Perl 6 está desaparecido há muito tempo. Em 2002 entrevista do Slashdot com Larry, ele fala sobre o Perl 6 casualmente, como se estivesse chegando. Infelizmente, ele ainda não foi lançado. Isso não é bem assim Duke Nukem Forever O senhor não está no território do vaporware, mas está bem perto.

Embora seja interessante, tenho que admitir que tenho um problema com todo esse pontificado sobre a natureza das linguagens de script e o lançamento incessantemente atrasado do Perl 6. As ações do Sr. Wall não são, em algum nível, contrárias ao espírito da própria coisa que ele está discutindo? A essência de uma linguagem de script é gratificação imediata. Eles são Mostre, não conte em ação.

Na verdade, minhas primeiras experiências de programação não começaram com um ciclo de compilação e vinculação. Elas começaram mais ou menos assim:

básico sobre a Apple // series

basic na série Atari 8-bit

basic no Commodore 64

Assim que o computador foi inicializado, a primeira coisa que o senhor viu foi aquele cursor piscando. Ele está bem ali, convidando o senhor.

Vamos lá. Digite alguma coisa. Veja o que acontece.

Essa é a beleza inefável e inegável de uma linguagem de script. O senhor não precisa ler um artigo gigante de Larry Wall ou esperar 8 anos pelo Perl 6 para descobrir isso. Está bem ali na frente do senhor. Literalmente. Tente digitar isso na barra de endereços do seu navegador:

javascript:alert('hello world');

Mas não é real programação, certo?

Minha primeira experiência com o real A programação real estava no ensino médio. Munido de uma cópia comprada do livro o clássico livro da K&R e um compilador C pirata para meu Amiga 1000sabia que finalmente era hora de deixar de lado meus programas infantis do AmigaBASIC.

A linguagem de programação C

Lembro-me daquela noite apenas vagamente (em minha defesa: sou velho). Minha mãe estava dando algum tipo de festa no andar de baixo, e uma das convidadas tentou me tirar do meu quarto e me fazer socializar. Ela era uma senhora muito simpática, com a melhor das intenções. Eu brandi meu livro da K&R como um escudo, segurando-o e explicando para ela: “Não. A senhora não está entendendo. Isso é importante. A senhora não está entendendo. Isso é importante. Eu preciso aprender o que está nesse livro”. Hoje à noite, Eu me torno um programador de verdade. E assim comecei.

O que aconteceu em seguida foi que o senhor as oito horas mais infelizes de minha vida na computação. Entre os ciclos de compilação dolorosamente lentos e a dança torturante e implacável dos ponteiros e da alocação de memória, eu estava quase pronto para desistir completamente da programação. C não era para mim, com certeza. Mas eu não conseguia deixar de lado a sensação incômoda de que havia algo completamente errado com esse tipo de programação. Como C poderia sugar toda a alegria despreocupada de minhas pequenas e estúpidas aventuras no AmigaBASIC? Essa linguagem pegou o que eu conhecia como programação e o distorceu de forma irreconhecível, transformando-o em algo rígido e cruel.

Eu não sabia na época, mas agora sei com certeza. Eu não estava programando nada. Eu estava criando scripts.

Não acho que minha repulsa por C seja algo pelo qual eu precise me desculpar. Na verdade, acho que é o contrário. Só estou esperando que o resto do mundo alcance o senhor. o que eu sempre soube.

A razão pela qual linguagens dinâmicas como Perl, Python e PHP são tão importantes é fundamental para entender a mudança de paradigma. Diferentemente dos aplicativos do paradigma anterior, os aplicativos da Web não são lançados em ciclos de um a três anos. Eles são atualizados todos os dias, às vezes a cada hora. Em vez de serem pinturas acabadas, são esboços que são continuamente redesenhados em resposta a novos dados.

Em minha palestra, comparei os aplicativos Web à famosa farsa de Von Kempelen, o turco mecânico, uma máquina mecânica de xadrez de 1770 com um homem escondido dentro. Os aplicativos Web não são uma farsa, mas, assim como o turco mecânico, eles têm um programador dentro deles. E esse programador está desenhando loucamente.

Agora, eu aprecio e admiro a influência seminal do C. Nas mãos certas, é uma ferramenta incrivelmente poderosa. Cada linguagem tem seu lugar, e cada programador deve escolher a linguagem que melhor se adapte ao seu conjunto de habilidades e à tarefa em questão.

Eu sei, eu sei, Nunca serei um programador de verdade. Mas já me conformei com minhas limitações, porque Sou um roteirista de coração.