As “línguas restritas” de Fernando J. Corbató


13

No discurso de premiação de Turing de 1990 , Fernando J. Corbató listou as razões pelas quais sistemas complexos falharão inevitavelmente. Em sua conclusão, ele dá algumas sugestões para diminuir a probabilidade de falha. Ele lista uma ideia da seguinte maneira:

O uso de linguagens restritas para design ou síntese é uma metodologia poderosa. Ao não permitir que um programador ou designer expresse idéias irrelevantes, o domínio de possíveis erros se torna muito mais limitado.

O que ele quer dizer com "linguagem restrita"?

Por um momento, considerei a programação de restrições . No entanto, a programação de restrição consiste em restringir o espaço de solução do programa. É uma ferramenta que capacita um programador. O recurso a que Corbató está se referindo parece ser algo que realmente restringe o programador, ou pelo menos a torna mais inclinada a escrever código de terser.

Meu segundo pensamento é que ele está se referindo a linguagens de programação conservadoras . Corbató recebeu seu prêmio Turing pelo trabalho realizado nas décadas de 1960 e 1970. Entendo que ele lidou com muitos cartões perfurados. Eu nunca vi um cartão perfurado, então certamente não sei como programar um, mas acho que a programação do cartão perfurado é extremamente liberal. Eu suspeito que as noções de verificação de tipo, análise estática e assim por diante simplesmente não existiam. Então, Corbató talvez esteja se referindo à idéia de linguagens que impedem o desenvolvedor de cometer erros estúpidos? Este também não parece ser o caso. A verificação de segurança e a modelagem de dados não têm nada a ver com a concisão, que é o que ele parece estar falando quando menciona "não permitir ... idéias irrelevantes".


@jweyrich Obrigado por me encaminhar para Programmers.SE. No entanto, quando vou para a tag de linguagens de programação no StackOverflow, encontro muitas perguntas tão gerais quanto as minhas, como "Existe uma linguagem tipicamente fraca?" onde o autor também faz referência a materiais de leitura geral
Xander Dunn

5
@thoughtadvances Verifique as datas das perguntas que você mencionou, estou disposto a apostar que a maioria delas é bastante antiga. SO tem 4 anos, as coisas mudam e, em geral, ficamos mais rígidos com o passar do tempo. Sua pergunta é boa para os programadores (eu sou um mod lá), mas teria sido mais fácil se você tivesse sinalizado isso para moderar a atenção e pedir que ela fosse migrada em vez de republicada. A migração pouparia o trabalho de reposicionar e traria a resposta aos programadores junto com a pergunta. Não se preocupe com isso agora, eu vou cuidar disso.
precisa saber é

3
Como exemplo, se (observe: se ) a idéia de malloc é "irrelevante" para uma aplicação específica por algum motivo, escolher Java ("restringido por não ter malloc) sobre C (malloc existe) limitaria" o domínio de possíveis erros "que poderia ser associado com malloc
mosquito

@YannisRizos Muito obrigado por migrá-lo. Eu não sabia que essa função existe. Talvez os usuários mais experientes no StackOverflow possam ter sugerido esse caminho, em vez de apenas fechá-lo.
precisa saber é o seguinte

3
" Codificar em cartões perfurados " era apenas outra maneira de digitar um programa. No final dos anos 1960 e início dos anos 1970, tínhamos idiomas tão sofisticados quanto os que temos hoje. Muitos dos principais conceitos de linguagens de programação já estavam bem estabelecidos, e ALGOL 60 já havia estabelecido o padrão para ferramentas de programação de 1963.
Ross Patterson

Respostas:


8

Uma "Linguagem de programação restrita" é simplesmente uma que não fornece maneiras (fáceis) de fazer coisas irrelevantes para o objetivo das linguagens.

Note que é "irrelevante", não "burro", "burro" ou "incorreto".

Um bom exemplo disso pode ser o ISO / ANSI SQL (antes do SQL-92), que não tinha como na linguagem de consulta expressar muitos artefatos de programação do tipo procedural, como recursão ou loops. (No entanto, ele os possui agora e os fornecedores adicionaram extensões personalizadas para eles anteriormente de qualquer maneira).


6
Este é exatamente o ponto de Corbató. Ele entrou em muitos detalhes em um artigo da 1969 Datamation chamado PL / I como uma ferramenta para programação de sistemas (com o incrível subtítulo " cinco anos com um compilador temporário "!).
Ross Patterson

Obrigado, esta resposta é muito útil. Essa ideia tem implicações interessantes. Isso parece indicar que um programador gostaria de ter acesso a uma infinidade de linguagens variadas com habilidades variadas, em vez de ter uma linguagem para governar todas elas, que é o que muitos programadores gostariam de supor que C, C ++ ou Java possam ser.
precisa saber é o seguinte

@RossPatterson Excellent! Obrigado! Eu estava procurando uma elaboração sobre o tema de Corbató, mas não encontrei muita coisa.
precisa saber é o seguinte

1
Uma excelente citação resumida desse artigo da Datamation: " Nosso objetivo ao fazer o sistema ... foi explorar a fronteira e ver como montar efetivamente um sistema que alcança e satisfaz as metas estabelecidas. Estamos tentando encontrar elabore as principais idéias de design e as comunique a outras pessoas, independentemente do sistema com o qual elas estejam familiarizadas.Portanto, uma linguagem que supera os detalhes específicos do hardware é certamente desejável ... Em outras palavras, isso obriga a projetar, para não mexer no código. E esse acabou sendo um de seus pontos fortes . "
Ross Patterson

2
@thoughtadvances " Isso parece indicar que um programador gostaria de ter acesso a uma infinidade de idiomas variados com habilidades variadas, em vez de ter um idioma para governá-los todos " - essa é uma das diferenças entre um programador júnior e um sênior. Sem carpinteiro tem apenas um martelo :-)
Ross Patterson


0

Primeiro, você precisa entender a era da computação quando seu discurso foi proferido (1990). Além disso, perceba que ele está falando com um público acadêmico e o MIT é sua base.

Naquela época, os idiomas para os idiomas de escrita (meta-idiomas) eram um tópico importante. A arte do protocolo Meta-Object acaba de sair e está inspirando o design de novas linguagens. No entanto, todo esse luxo tem um preço: complexidade.

Para ajudar a reduzir a complexidade dos sistemas e permitir a verificação desses sistemas, meta-linguagens como Z surgiram para fazer uma especificação testável. Acho que ele se refere a esse tipo de linguagem.


2
Corbató não é apenas um acadêmico do MIT no final dos anos 20. Ele é um dos pioneiros do nosso campo. Seu trabalho no CTSS foi seminal, levando diretamente aos sistemas Multics, Unix, CP / 67 e Linux e z / VM de hoje. E a afirmação em questão está relacionada a um princípio que ele expôs abertamente 20 anos antes de A Arte do Protocolo de Meta-Objeto e sua palestra de Turing.
Ross Patterson

0

Possivelmente ele quer dizer uma linguagem que tem um número bastante baixo de conceitos para entender. Confira aqui os diagramas que mostram as representações gráficas dos conceitos em Coffescript, Ruby e C ++. Pode ser Tuner significa que quanto menos conceitos você tiver em um idioma, menores serão as chances de expressar idéias irrelevantes.


"... Ou um idioma" - isso é um comentário sobre alguma coisa?
mosquito

Editou a postagem, para não parecer um comentário.
Manoj R
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.