- Estudou por 5 anos em uma escola de computação na França e atuou por 20 anos como desenvolvedor freelancer
- Trabalhou principalmente em projetos de clientes com Ruby on Rails
- Ao começar a aprender Common Lisp, escreveu um protocolo de administração de servidores que gera um parser ASN.1
- Gerou código C a partir de Common Lisp para desenvolver um servidor SNMP
- Depois disso, escreveu vários projetos baseados em Common Lisp:
- cl-unix-cybernetics – projeto com mais estrelas no GitHub
- Desenvolvimento de cl-streams e cffi-posix
- cl-facts – um triple store que funciona como banco de dados de grafos em Common Lisp
- Rápido, com transações atômicas e suporte a transações aninháveis
- Compatível com
unwind-protect
- Pode ser usado aprendendo apenas 3 macros
- Apresentado no European Lisp Symposium (ELS)
- Ao se concentrar no desenvolvimento em Common Lisp, perdeu clientes, mas passou a ter uma forte convicção no potencial do Lisp
Limitações de máquinas virtuais (VMs) e contêineres
- Especialistas apontam problemas em VMs e contêineres:
- VMs desperdiçam CPU e largura de banda desnecessariamente
- Contêineres Linux baseados em cgroups têm vulnerabilidades de execução remota de código (RCE) e elevação de privilégio
- Novas vulnerabilidades de segurança são descobertas todos os anos
- Ao preferir OpenBSD, evita problemas de ferramentas DevOps como Terraform e Ansible
Limitações do Common Lisp e problemas de desempenho
- Em Clojure e outras linguagens, surgem problemas de desempenho por causa do GC (coletor de lixo):
- Houve um caso de fracasso ao desenvolver um jogo de estratégia que processava milhares de unidades
- O GC da JVM traz problemas de desempenho e custo
Decisão de migrar para C
- Reconheceu os limites de desempenho e portabilidade do Common Lisp:
- Linux, OpenBSD, GTK+ e GNOME são todos escritos em C
- No fim, migrou para C para resolver os problemas de desempenho e portabilidade
Desenvolvimento da nova linguagem KC3
- Desenvolvimento da biblioteca utilitária libc3 → linguagem C3 → renomeada para KC3
- Características do KC3:
- Possui interpretador (ic3) e compilador (c3c)
- Cria estruturas de dados a partir de buffers UTF-8 e faz a conversão inversa
- Programação defensiva → minimização de bugs desde o início
- Sem problemas de segurança
- Sistema de tipos baseado em unions com tag via enum
Resultados obtidos com KC3
- Portou o cl-facts para C89:
- Desenvolvimento concluído durante o período da Covid-19
- Implementou adição de triplas, remoção, sistema de consultas recursivas, transações, logging, persistência etc.
- Escreveu parser e gerador para tipos algorítmicos:
- Inclui structs, listas ligadas, mapas, tabelas hash, números complexos, tuplas, blocos de código etc.
- Recebeu grande inspiração de José Valim (criador do Elixir)
- ikc3 – REPL que exibe o resultado da avaliação do KC3
- kc3_httpd – desenvolvimento de um servidor web baseado em framework MVC
- A página atual do blog também é servida por kc3_httpd
- Criou um site de documentação → usando o conversor de Markdown para HTML do KC3
Conclusão
- Migrou para C com base na experiência adquirida em Common Lisp
- O KC3 apresenta excelentes resultados em desempenho, segurança e portabilidade
- Pretende fornecer mais macros e exemplos relacionados ao KC3 no futuro
1 comentários
Comentários do Hacker News
Tenho a opinião contrária. Usei muito VB quando era jovem, depois aprendi Java, C e C++ na faculdade, e usei principalmente C.
Concordo completamente com esse sentimento. Por alguns anos senti um forte impulso de desenvolver algo em C puro
Comecei a programar em C há muito tempo e, ainda hoje, às vezes quero voltar àquela época
Depois de ler o post do blog, fiquei confuso sobre o que o autor estava tentando transmitir
Foi apresentado um exemplo de código do kc3
C foi minha primeira linguagem, e fiz apps simples de console e pequenos jogos
Às vezes programo em C como hobby. Mas há trabalho repetitivo demais, e isso fica entediante
C foi bem-sucedida porque era prática
Não entendi nada
Este texto parece uma história de advertência sem final feliz