- A experiência de 20 anos trabalhando como freelancer de Ruby on Rails levou a projetos em Common Lisp, mas o acúmulo de limitações de desempenho, portabilidade e ambiente de execução acabou levando à escolha do C novamente
- O cl-facts tinha um triple store rápido e transações atômicas aninháveis, mas o longo tempo de desenvolvimento também acabou resultando na perda de clientes
- A insatisfação com máquinas virtuais, contêineres baseados em Linux cgroups e coletores de lixo levou à conclusão de que C continua sendo uma base realista para software de sistema
- O trabalho iniciado em libc3 se expandiu para a concepção da linguagem C3, do interpretador ic3 e do compilador c3c, e depois mudou de nome para KC3 por causa de conflito de nomenclatura
- Atualmente, o KC3 inclui um banco de dados em grafo portado para C89, o REPL ikc3, o servidor web MVC kc3_httpd e até um site de documentação baseado em uma implementação em C de Markdown para HTML
Como o trabalho com Common Lisp levou à reescrita em C
- Depois de estudar por 5 anos em uma escola de computação na França e trabalhar por 20 anos como desenvolvedor freelancer de Ruby on Rails, o que parecia ser um aprendizado curto de Common Lisp acabou se tornando um projeto cada vez maior
- Com Common Lisp, gerou código C para criar um parser ASN.1 e um sistema de consultas, e esse trabalho evoluiu para um servidor SNMP customizado em Common Lisp-to-C
- Depois disso, escreveu vários pacotes em Common Lisp
- cl-unix-cybernetics se tornou o projeto com mais estrelas entre seus repositórios no GitHub
- Também escreveu cl-streams e cffi-posix
- cl-facts é um triple store que pode ser usado como banco de dados em grafo em Common Lisp
- O cl-facts entregou desempenho rápido, transações atômicas, transações aninháveis, compatibilidade com
unwind-protecte usabilidade que exige aprender apenas 3 macros - O cl-facts foi apresentado como lightning talk no European Lisp Symposium, na Bélgica, e os slides da apresentação estão em facts.pdf
- Embora o desenvolvimento de pacotes em Common Lisp consumisse muito tempo e tenha levado à perda de clientes, a avaliação foi de que Common Lisp é uma ferramenta para as futuras gerações
C, KC3 e a configuração atual
- A experiência de que máquinas virtuais desperdiçam CPU e largura de banda com emulação, e de que contêineres baseados em Linux cgroups continuam revelando problemas de RCE e escalada de privilégio, levou a uma escolha centrada em OpenBSD
- Evitou ferramentas DevOps como Terraform e Ansible, e também viu pessoas insatisfeitas não só com VMs e contêineres, mas com as próprias linguagens de programação
- Um caso de tentativa de criar um jogo de estratégia em Clojure, com milhares de unidades, cada uma com sua própria percepção do mundo, fracassou por causa do garbage collector
- Projetos em Common Lisp também tiveram seu escopo limitado por causa do garbage collector, e o garbage collector da JVM é avaliado como uma vantagem comercial que custa caro para ser bem construída
- Considerando desempenho e portabilidade, concluiu que, sem ferramentas adicionais, a escolha racional é C
- Linux é escrito em C
- OpenBSD é escrito em C
- GTK+ é escrito em C puro orientado a objetos
- GNOME é escrito em C
- Muitos aplicativos de desktop Linux também são escritos em C antigo
- A partir da biblioteca utilitária libc3, o projeto evoluiu para a linguagem C3, o interpretador ic3 e a concepção do compilador c3c
- Foi projetado para que buffers UTF-8 e estruturas de dados circulassem rapidamente, aceitando o custo de memória para aplicar bounds checking
- Adotou programação defensiva como princípio central, buscando reduzir bugs a zero desde o início, e afirma que o código do KC3 é executado sem implicações de segurança
- O interpretador inicial foi feito para tratar no REPL os tags, uma união com tag baseada em enum que contém todos os tipos de dados da linguagem
- Três anos depois, concluiu uma refatoração em 5 camadas, todos os testes voltaram a passar, e o servidor web também voltou a um estado em que não quebra
- O nome da linguagem mudou para KC3 porque C3 já estava em uso
- O antigo banco de dados em grafo em Common Lisp, cl-facts, foi portado para C89
- A maior parte foi escrita durante o período de lockdown da Covid-19 em 2020
- Inclui adição e remoção de triplas, sistema de consultas recursivas, transações, logging e persistência
- A implementação em C89 reproduz quase exatamente o projeto original em Common Lisp
- O KC3 também inclui parser e gerador para tratar a semântica formal de vários tipos de dados algorítmicos
- Inclui Structs, Linked lists, Maps, Hash tables, Time, Complex, Rationals, Tuples, Code blocks, Quotes, Unquotes, Copy on write, Skip lists e Sets
- Há macros, e exemplos serão abordados em um texto futuro
- Houve grande inspiração em José Valim e no trabalho com Elixir
- O REPL ikc3 faz o parsing de entrada do teclado ou de arquivos e envia os resultados da avaliação de KC3 para a saída padrão, sendo usado na maior parte da segunda etapa dos testes unitários do KC3
- O kc3_httpd é um servidor web com framework MVC e gera as páginas web atuais
- Um texto sobre Common Lisp registrou 700 visualizações, e o site de documentação foi feito com kc3_httpd e uma implementação em C expandida de Markdown para HTML
Ainda não há comentários.