O C ++ é uma ótima linguagem de várias maneiras, mas algumas coisas em particular são difíceis de escrever sem um IDE. Como usuário do VIM, seria muito interessante se eu tivesse acesso a uma linguagem de nível superior que me permitisse escrever C ++ com Expressões S e possivelmente com macros do tipo Lisp, permitindo a geração de código limpo e evitando reescrever os mesmos padrões. repetidamente.
Eu perguntei no freenode e testei várias idéias, como compilar Lisp-> C com compiladores como ECL e Bigloo, mas nenhuma delas gerou código C particularmente limpo.
Existem trabalhos sobre esse assunto?
Respostas:
Compilar linguagens de nível superior para as de nível inferior é fácil. Existem inúmeros exemplos disso sendo feito. Sem sair muito da tangente, podemos apontar os primeiros compiladores C ++ que compilaram até C.
Quando você começa a jogar "limpo" e "legível" na mistura, no entanto, as coisas ficam realmente difíceis. Um código limpo e legível expressa o significado e a intenção do que você estava escrevendo. Os computadores são notoriamente ruins em interpretar e criar significado. É mais provável que você acabe com variáveis nomeadas
int_147
queinput_buffer_length
. Claro, se você realmente quisesse fazer esse projeto funcionar, você poderia se envolver em um grande projeto de IA para converter seu Lisp em algum tipo de C ++ decentemente legível, mas, para ser sincero, os compiladores Common Lisp são muito bons no que fazem .Mais importante que a dificuldade de gerar C ++ a partir de um Lisp é a utilidade disso. Que finalidade serviria para que o C ++ gerado fosse legível? Se o Lisp é o seu código-fonte, as representações intermediárias devem ser irrelevantes. Se você deseja entregar o C ++ a programadores que não entendem o Lisp original, agora você tem outro problema. O que acontece quando eles desejam modificar o C ++ gerado? O que acontece se eles escrevem coisas em C ++ que não se traduzem corretamente no seu Lisp?
Digamos que resolvemos isso. É uma década depois e, depois de gastar centenas de milhões de dólares em recursos do Departamento de Defesa, criamos esse mecanismo de tradução de idiomas maciço e complexo (mas sem falhas) que pode transformar o Lisp em C ++ idiomático e vice-versa. O que realmente ganhamos que não seria melhor realizado ensinando às pessoas uma nova linguagem de programação ou apenas desenvolvendo um novo compilador que nos permite vincular as duas linguagens?
Oh, certo. Seu chefe quer que você escreva C ++ e você prefere não. Atualize seu currículo e encontre um novo emprego.
fonte
Resposta curta, atualmente não há nada lá fora que o ajude a converter o Lisp em READABLE C ++. Claro que você pode converter qualquer coisa em C ++ ou C, mas o código legível é escrito por humanos, não por programas. Claro que você pode gerar código C ++ com formatação adequada, recuos, bons nomes de classe e talvez até de alguma forma obter tradução perfeita de objetos de classe Lisp para classes C ++. Talvez você possa vincular as dependências de sua biblioteca da maneira correta e talvez possa compilar binários muito próximos do que a linguagem C teria produzido se você tivesse escrito tudo em C. Mas, em última análise, o código legível é uma beleza que não é compreendida por alguém, pelo menos ainda não, e possivelmente nunca considerando que o termo seja legível é bastante subjetivo, para começar, e o que pode ser considerado legível por um grupo de desenvolvedores pode ser considerado atroz por outros.
Para tornar o C ++ legível, você precisa escrever em C ++, não no Lisp. Você também deve poder alterar seu estilo de codificação de acordo com o que as pessoas que irão ler seu código entenderão melhor. Assim como os livros, os programas são escritos com um público específico em mente e podem ser bonitos e tocantes se forem bem escritos, e ofuscados e tediosos, se não. E se não conseguirmos criar um programa para escrever belos romances de ficção para nós, não conseguiremos criar algo para converter em C ++ legível.
fonte
O ViM é um ótimo IDE para C ++. Ele tem a melhor conclusão que eu já vi até agora também, embora fique um pouco lento se você puxar muitos cabeçalhos, o clang completo . E para a compilação, encontrei todos os IDEs ausentes de qualquer maneira; você acaba escrevendo o sistema de compilação no CMake ou algo assim. E eu não vi nada para fornecer alguma ajuda para o cisco, ponto final.
É verdade que o C ++ não possui macros no estilo lisp, mas os modelos podem fazer tudo o que as macros higiênicas do esquema podem fazer e um pouco mais, porque você pode implementá-las de maneira diferente com base nos tipos e em seus recursos. É verdade que a falta de coletor de lixo torna os fechamentos um pouco mais entediantes, mas o idioma RAII usado para gerenciamento de recursos tem suas próprias vantagens e propriedades interessantes.
Se você é um estudante, conhece realmente todo o C ++ avançado? Desde a biblioteca de algoritmos até a escrita de modelos com implementações alternativas baseadas nas propriedades dos tipos de argumento, compile cálculos de tempo usando a meta-programação de modelos (usando o Boost.MPL) para entender como o Boost funciona nos bastidores? Caso contrário, recomendo aproveitar esta oportunidade para aprender C ++ avançado. A tarefa da escola não precisará ser mantida, para que você possa brincar com o idioma para ver quanto valem os recursos em que código de produção você teria que ter cuidado com a legibilidade.
E, para responder à pergunta direta final: o C ++ tem tantos idiomas diferentes, que não há como gerar C ++ idiomático a partir de nada. Simplesmente porque não haverá maneira de expressar a maioria desses idiomas em qualquer outra coisa. A partir do fato de que qualquer coisa com coleta de lixo alocará tudo no heap, enquanto em C ++ é idiomático tirar proveito da pilha.
fonte