Pitch: Carla, a linguagem mais baixo nivel que C?
Quem sou eu?
Meu nome é Lucas Silveira. Tenho 16 anos, e programo desde os 8.
Grande parte do meu tempo de vida, foi na frente de uma IDE. E eu sempre fui apaixonado por linguagens.
Dito isso...
O que é Carla, Morgana e Runa?
Carla, Morgana e Runa são todas "linguagens" criadas por mim. Eu venho trabalhado nisso de forma silenciosa a muito tempo, e vi recentemente projetos de linguagens sendo anunciados aqui, e notei o quão maior é o escopo do meu projeto.
Isso, de forma alguma deve diminuir a conquista dos outros, apenas aumentar um pouco a minha (talvez)
O início
Carla nasceu e foi maturada com o tempo, já usou LLVM como back-end, e até Assembly diretamente. Mas, eu sempre achava ruim isto, e queria ter um "ecosistema" real. Disto, nasceu o Morgana, uma alternativa ao LLVM no qual foi feita para o Carla. Porém com algumas diferenças do LLVM:
- Compilação rápida (Maior problema do Rust, por exemplo)
- Fácil acesso à comunidade (Falaremos melhor sobre isso logo)
- Portabilidade extrema (tal como LLVM, porém oferecendo um back-end complexo)
Extensors
Extensors são "pacotes" no qual você baixa para ter seu código Morgana finalmente transformado em assembly.
E, como você pode baixar um complemento para o Morgana, o ideal era que este complemento fosse fácilmente adaptavel por você, ou por "desenvolvedores enxeridos" e interessados em melhorar a performance de seu projeto.
Para isto, eu decidi usar lua como a linguagem dos extensors. Mas, tive alguns problemas com o Lua 5.4 oficial da PUC-RJ para AARCH64, e, decidi criar o meu interpretador de lua. Com isso, nasce o Runa.
Runa
Runa, nada mais é do que um interpreatdor MINIMALISTA, contendo apenas o que eu julguei necessário para uma linguagem "Basica" como o Lua usado nos extensors. Ele tem um FFI direto com C, compartilhando do mesmo endereço virtual de memória, permitindo comunicação fina entre C e Lua.
Runa também é escrito em Rust, sendo 0 memory-leaks (se bem usado). O que torna Runa uma opção viável para programas embarcados, de hardware altamente limitado.
Além de que, fiz algumas medições básicas comparando o tempo de runtime do Runa, JavaScript e Python.
Rodei o mesmo código (Fibonacci NÃO RECURSIVA de 80) nas 3 linguagens, e obtive:
Runa:
Output: 14472334024676220
em: 0,003s
JavaScript (Node.js):
Output: 14472334024676220
em: 0,033s
Python:
Output: 14472334024676221
em: 0,013s
E, sim, eu também não sei por que o Python deu um resultado diferete, mas vida que segue.
E por que eu deveria conhecer Carla?
Além de Carla ter seu próprio ecosistema, assim como zig, ou clang, Carla tem também o objetivo de ser sério, e não um projeto de brincadeira. Uma sintaxe CONCISA, muito inspirada em C, Rust, Zig e Go.
Sendo, praticamente um wrapper de Assembly (C like), mas, com coisas de qualidade de vida. Como, um "print" de strings estáticas. (puts como statement), e coisas do tipo.
Por exemplo, um Hello, world básico em Carla (que vem quando vocês usam "carla init"), seria:
@_start
void main = () {
puts "Hello, world";
}
E, sim. você pode baixar e testar o Carla no seu próprio pc.
No repositório oficial (https://github.com/lucasFelixSilveira/carla) vc pode baixar o "./install.sh", e rodar. Será instalado na sua máquina o Carla e o Morgana. (Runa já vem empacotado no Morgana).
Por enquanto, posso garantir o funcionamento do Carla e do Morgana APENAS no Linux. Mas, claro, traremos pro Windows e outras plataformas.
Lembrem-se que Carla é para ser mais baixo nível do que C (em alguns quesitos). Não respeito o padrão de outras linguagens nem mesmo em como estruturei meus compiladores e interpretador. Eu fiz como acho que deve ser feito.
Assim como Go tem a sintaxe que Ken Thompson acha que deve ter, Carla tem a sintaxe que eu acho que deve ter, da forma que eu idealizo uma linguagem ideal. Isto quer dizer, que sim, haverá coisas que só funcionam em X aplicação. (Tal como o puts)
Conclusão
Eu gostaria MUITO que vocês dessem uma olhada no Carla, no Morgana e até no Runa, me passasem um bom feedback do que acham e, claro, deixar uma estrelinha nos repositórios!
Agradeço a atenção!
https://github.com/lucasFelixSilveira/runa
https://github.com/lucasFelixSilveira/morgana
https://github.com/lucasFelixSilveira/carla