No espírito de algumas discussões gerais como esta , estou abrindo este tópico com a intenção de reunir opiniões sobre quais são os desafios em aberto e os tópicos mais importantes da pesquisa em linguagens de programação . Espero que a discussão possa trazer à tona opiniões sobre o futuro da pesquisa em linguagens de programação.
Acredito que esse tipo de discussão ajudará novos pesquisadores, como eu, interessados em PL, bem como aqueles que já estão um pouco envolvidos.
Respostas:
Penso que o objetivo geral da teoria de PL é reduzir o custo da programação em larga escala, melhorando as linguagens de programação e o ecossistema técnico em que as linguagens são usadas.
Aqui estão algumas descrições de alto nível, um tanto vagas das áreas de pesquisa de PL que receberam atenção constante e provavelmente continuarão a fazê-lo por um tempo.
A maioria das pesquisas em linguagem de programação foi feita no contexto da computação seqüencial e, até agora, discutimos discutivelmente um conjunto de recursos disponíveis na maioria das linguagens de programação modernas (por exemplo, funções de ordem superior, inferência (parcial) de tipos, correspondência de padrões , ADTs, polimorfismo paramétrico) e são bem compreendidos. Ainda não existe um consenso sobre os recursos da linguagem de programação para computação simultânea e paralela.
Relacionado ao ponto anterior, o campo de pesquisa de sistemas de digitação viu grande parte de sua atividade em computação seqüencial. Podemos generalizar este trabalho para encontrar disciplinas de digitação tratáveis e úteis que restringem a computação simultânea e paralela?
Como um caso especial do ponto anterior, a correspondência de Curry-Howard relaciona a teoria da prova estrutural e a programação funcional, levando à transferência sustentada de tecnologia entre ciência da computação e (fundamentos da) matemática, com, por exemplo, a teoria do tipo de homotopia como um exemplo impressionante. Existem muitas dicas tentadoras que podem ser estendidas para (algumas formas de) computação simultânea e paralela.
A especificação e verificação de programas amadureceram muito nos últimos anos, por exemplo, com assistentes interativos de prova como Isabelle e Coq, mas a tecnologia ainda está longe de ser utilizável em larga escala na programação diária. Ainda há muito trabalho a ser feito para melhorar esse estado de coisas.
Linguagens de programação e tecnologia de verificação para novas formas de computação. Estou
pensando aqui em particular na computação quântica e nos mecanismos computacionais de inspiração biológica, veja, por exemplo, aqui .
Unificação. Existem muitas abordagens para linguagens de programação, tipos, verificação, e às vezes se sente que há muita sobreposição entre elas e que há uma abordagem mais abstrata esperando para ser descoberta. Em particular, é provável que os mecanismos computacionais de inspiração biológica continuem nos dominando.
Um problema da pesquisa de PL é que não há problemas em aberto, como a questão P / NP, em que podemos dizer imediatamente se uma solução proposta funciona ou não.
fonte
Deixe-me listar algumas suposições que limitam a pesquisa em linguagem de programação. É difícil evitar isso porque eles sentem que são uma parte essencial do que são as linguagens de programação ou porque explorar alternativas seria "não mais o design da linguagem de programação". Com cada suposição, listo seus efeitos limitantes.
Programas são construções sintáticas.
Um programa parcialmente gravado não pode ser executado.
Os programas são sobre dar instruções aos computadores.
Programar é como criar e não pode ser feito por pessoas comuns.
Eu acho que poderia continuar.
fonte
Há um problema que tenho me perguntado. Não tenho idéia se isso se qualifica como um desafio aberto.
O conhecimento matemático tem crescido constantemente com o tempo. Os fundamentos teóricos, conceitos, notações e provas evoluíram ao longo dos séculos. Os matemáticos conseguiram a agregação sem necessariamente verificar sua consistência global de maneira sistemática e formal a qualquer momento (embora houvesse tentativas de fazê-lo).
Devemos esperar que as linguagens de programação e as bibliotecas de programas se agregem e evoluam de maneira semelhante ao longo do tempo. Que tipo de ferramentas poderia ajudar a gerenciar a agregação de resultados e bibliotecas de programação, a fim de mantê-los consistentes e efetivamente utilizáveis por todos, pois os computadores podem ser mais formais e exigentes quanto à consistência. Temos que refazer as bibliotecas para cada nova linguagem de programação. Por que devemos escolher uma linguagem porque ela possui as bibliotecas corretas para o aplicativo pretendido, e não para suas qualidades intrínsecas como meio de programação?
Em um tópico diferente, você pode encontrar idéias na seguinte pergunta: As linguagens de programação estão se tornando mais como as linguagens naturais? Sei que a idéia pode não atrair muitos cientistas teóricos da computação, mas ainda pode ser útil analisando questões diferentes ou de um ponto de vista diferente. Estou longe de concordar com muitas das idéias postadas, mas é para isso que serve a discussão.
fonte
houve uma tremenda inovação e explosão nas linguagens de programação dos lados teórico e aplicado ao longo do século passado; no entanto, pode-se argumentar que esse é um evento singular / único na história da computação, semelhante a uma "explosão evolutiva" (veja também "por que existem tantas linguagens de programação?" no cs.se) e, portanto, o futuro não será como o passado a esse respeito. no entanto, existem algumas tendências atuais de longo prazo identificáveis em play / under development.
Complexidade de programação / software e as maneiras de gerenciar / minimizar / mitigar / reduzir é um tópico que sempre influenciou o design da linguagem e é possivelmente ainda mais significativo na era atual, com sistemas de software muito grandes / complexos bastante comuns. esse era um aspecto importante da lógica do projeto de OOP, mas agora temos sistemas de OOP altamente complexos! A ponderação focalizada levou a clássicos no campo, como o mítico mês-homem de Brooks, que de muitas maneiras ainda é uma perspectiva muito válida, possivelmente ainda mais relevante do que quando foi escrita.
paralelismo. há uma mudança no hardware em direção a um maior paralelismo (por exemplo, multicore etc) e o aumento da velocidade do clock não é mais suficiente para aumentar o desempenho. essa mudança ocorreu em meados da década de 2000 e está tendo uma grande influência na pesquisa / design de idiomas. o paralelismo sempre foi um tópico, mas tem uma nova proeminência / urgência: existe um amplo pensamento / consenso de que o paralelismo é excessivamente complicado e difícil na programação e talvez diferentes abordagens teóricas possam aliviar parte disso. uma boa referência a isso: O cenário da pesquisa em computação paralela: uma visão de Berkeley
datamining / big data . estes estão influenciando o design da linguagem de programação. Também novas direções na arquitetura do banco de dados estão afetando / impactando as linguagens de programação.
a supercomputação tem um impacto significativo no design da linguagem e também se sobrepõe ao paralelismo e datamining / big data, por exemplo, a novas linguagens como o MapReduce .
programação visual / fluxo de dados . houve um aumento nesses tipos de "linguagens" (em certo sentido, a programação visual está, de muitas maneiras, realmente desacoplar a programação das "linguagens"). também forte polinização cruzada com paralelismo.
AI . esse é mais um curinga de longo alcance e não está muito claro no momento como afetará as linguagens e a programação de computadores, mas provavelmente será muito substancial. no passado [de uma forma diferente], levava a idiomas inteiros como o prólogo . uma indicação inicial de como pode ser aplicada com resultados impressionantes é Algoritmos Genéticos / Programação Genética .
uma referência que pode ter algumas idéias úteis na linha do "futuro das linguagens de programação", Beyond Java by Tate. ele pondera (embora de forma controversa) que talvez o Java (indiscutivelmente uma das linguagens de programação mais sofisticadas / abrangentes existentes) esteja começando a mostrar sua idade e há sinais precoces de novas linguagens / abordagens surgindo para ocupar seu lugar a longo prazo.
fonte