- No passado, os ambientes de desenvolvimento Ada já haviam resolvido o problema da formatação de código
- Os desenvolvedores lidavam com o código na forma de uma representação intermediária (IR) DIANA e cada um o visualizava com as configurações de pretty-printing que preferisse
- Ainda hoje existem ineficiências e discussões recorrentes por causa de linters e políticas de formatação
- A workstation Rational R1000 oferecia um ambiente e recursos de desenvolvimento inovadores
- Ao olhar para a forma como essa questão era tratada uma geração atrás, o texto propõe ideias para mudar as práticas de desenvolvimento de hoje
O debate sobre formatação de código – a solução dos anos 1980
- O autor menciona sua experiência com o Sr. Paige, professor de ciência da computação que participou do trabalho em um compilador Ada quando o autor estava no ensino médio
- Em 2016, ao reclamar do incômodo de configurar ferramentas de linter e perguntar “por que ainda temos que passar por esse tipo de problema?”, ouviu falar de uma experiência em que isso já havia sido resolvido há mais de 40 anos
O surgimento de Ada e DIANA
- Em vez de armazenar código-fonte em texto, os desenvolvedores Ada usavam uma representação intermediária chamada DIANA (Descriptive Intermediate Attributed Notation for Ada)
- Cada desenvolvedor podia consultar o código do jeito que quisesse, com suas próprias configurações de pretty-printing
- Não existiam discussões sobre formatação nem problemas com linter, e no editor era possível modificar diretamente a árvore do programa, algo semelhante ao projectional editing moderno
Rational R1000 – um ambiente de desenvolvimento pioneiro
- A workstation Rational R1000 incorporava vários recursos avançados, como compilação incremental, análise estática, controle de versão e depuração
- Foi usada em projetos governamentais do DoD, na Estação Espacial Internacional (ISS), no caça F-22 e em outros desenvolvimentos de software importantes, além de ter contribuído para o surgimento da UML
- Segundo Grady Booch, o R1000 era uma máquina baseada em DIANA: ela não armazenava o código-fonte, usando apenas o pretty-printing da árvore DIANA
Vantagens do desenvolvimento baseado em DIANA
- Não havia necessidade de debates sobre formatação, configuração de linter ou padronização do ambiente de editor
- Com aceleração por hardware, oferecia uma experiência de desenvolvimento inovadora, com compilação incremental, refatoração fácil, integração rápida e outros ganhos
- Isso teve impacto importante na eficiência do desenvolvimento e no trabalho com sistemas de grande porte
O que isso sugere hoje
- A compilação acelerada por hardware é menos importante hoje, mas o problema da formatação continua longe de estar resolvido
- O modelo dominante não é o projectional editing nem ambientes live, mas já passou da hora de pensar na adoção de práticas de desenvolvimento mais eficientes e com menos atrito, inspiradas em abordagens do passado
Materiais de referência
- Ao pesquisar esse tema, o autor cita diversos documentos e relatórios técnicos relacionados ao R1000
4 comentários
Pelo que sei, já existe a funcionalidade de formatar automaticamente o código compartilhado com configurações padronizadas, e entendo que muitas empresas a utilizam.
Parece que a questão não é a formatação automática em si, mas sim que é desnecessário partir da ideia de que uma formatação específica é superior ou passar pelo processo de abandonar a minha formatação e me adaptar a uma formatação estranha. Como a lógica é salvar uma representação intermediária que não fique presa à formatação e depois fazer pretty-printing do jeito que for mais confortável para cada usuário.
A ideia era dizer que, com formatação automática, dá para fazer a mesma coisa nas linguagens existentes sem recorrer a representações intermediárias, mas a explicação ficou insuficiente.
Comentários no Hacker News
register, enquanto ponteiros continuam sendo representados por asterisco (*). Cada notação poderia ser mais intuitiva e clara, mas insiste-se em formas complexas e difíceis de ler. Símbolos e palavras reservadas também poderiam ser trocados por termos mais familiares e naturais, mas há apego excessivo à tradição e às convenções antigas, sacrificando a legibilidade. Como exemplo, explicam que até a funçãostrcpyem C poderia ser completamente reconstruída com termos e sintaxe mais claros e fáceis de ler.char *argv[]. Também argumenta que o estilo de formatação à la C++ — por exemplo,char* a, b— pode induzir ao erro, então esse estilo deveria ser evitado.=, ou usar tabs para evidenciar mais a profundidade estrutural. Dependendo do que o autor quiser enfatizar, pode preferir alinhar números à direita para destacar valores, ou alinhar membros para destacar estrutura. Sem metadados adicionais, argumenta-se que esse tipo de informação não pode ser extraído da AST.setValue([bar, glob], 1)ou uma sintaxe de comentário para sobrescrever estilo, entre outras opções.