Opa! Quem sabe! ksksk
Não, é algo mais original mesmo. Eu tenho mania de acordar no meio da noite com ideias, e começar a fazer. Neste caso, foi uma das raras boas ideias ksksks
Quando digo "mais baixo nível do que C", eu digo:
Carla é pensado para ser apenas um "wrapper" de assembly. Ser o mais próximo e direto possível. Sem muitas abstrações. Apenas algumas de qualidade de vida, como disse.
Sobre -nostdlib, não. Teremos libs std bem trabalhadas.
já o __attribute__, depende. Teremos sim, os atributos do C, mas, de forma mais simples. Isso vai ser consequência da "qualidade de vida do Carla", exemplo:
int32 foo = () naked {
return 2;
}
int32 main = () {
return foo();
}
Em relação ao modelo de memória, Carla usará Arenas de memória combado com um defer para desalocação ao pop do escopo.
E sim, também será compatvel com alocação 100% manual, assim como Rust, Zig e C++ são.
string name = arena.alloc(128);
defer arena.dump(name);
-- resto do código
Sobre a performance de compilação, o Runa não faz muitas coisas. Ele é reponsável por adaptar a sintaxe do Assembly para a arquitetura ou assembler específico. Claro, que se o usuário quiser ele pode e deve delegar mais funções ao Runa. Mas nos extensors oficiais é o mínimo possível. Grande parte das coisas processadas em tempo de compilação estão dentro do core C++ do Morgana.
Até o momento não realizei benchmarks, mas tenho absoluta certeza que se o comptime ficar pior em um projeto pequeno, em um grande nunca será pior, o que ainda sim gera vantagem.
Além de que, nos meus testes de performance do Runa (que estes sim eu realizei), o Runa chegava ser até 3x mais rápido em algumas situações do que o Lua oficial. Depois trarei mais dados sobre isto.
Muito obrigado pelo review!
Edit. Sobre as docs, eu removi. Por que ainda não tenho a sintaxe 100% estabelecida. Alguns detalhes MINIMOS ainda estão sendo decididos. Tipo:
- Devo usar parênteses no if?
- Devo implementar tipagem "automatica" com auto como C++ ou let?
- Em caso de ser um let, devo implementa-lo por padrão constante e permiti-lo ser mutável com
muttal como Rust? - Quando o tipo é definido em tempo de compilação, devo usar
:=ou mantenho=?
Estes são alguns dos exemplos.
