15

circ: uma linguagem pra circuitos digitais, que desenha a si mesma em ASCII

Oi pessoal, tudo bom?
Há um tempo eu venho escrevendo uma série de posts no meu blog sobre fundamentos de computação (portas lógicas, binário, memória, esse tipo de coisa), e em cada post tinha que colocar diagramas de circuitos. No começo eram SVGs estáticos que eu desenhava na mão, depois um renderizador em TypeScript que eu não parava de remendar. Funcionavam, mas eram só desenhos. Você podia olhar, mas não podia mexer numa chave e ver o LED acender.
Cansei dos remendos e escrevi uma linguagem bem pequena pra resolver isso. Se chama circ, e descreve circuitos digitais e compila pra WebAssembly. Do mesmo arquivo .circ saem três coisas: o .wasm que roda no navegador, um desenho do circuito em ASCII (via --preview), e a tabela verdade (via --truth-table). Os widgets interativos que aparecem nos posts da série são todos circ rodando em background.
Não é uma linguagem séria de sistemas (ainda), é uma coisinha feita pra um propósito específico. Mas eu me diverti muito construindo, e queria dividir com vocês.
Acabei de publicar uma carta apresentando ela: link do post. A linguagem tem um site com a referência completa em circ-lang.org e o código tá no GitHub: link do repo.
Tô bem curioso pra ouvir o que vocês acham. Feedback sobre a sintaxe, sobre o post, sobre qualquer coisa, é bem-vindo.
Valeu!

Carregando publicação patrocinada...
2

O projeto é legal, amigo. Já tive ideia parecida, mas com um propósito bem diferente. Talvez você já conheça, mas mesmo assim vou recomendar o Logisim-evolution.

Ah, e tem o jogo Turing Complete na Steam. Nesse jogo você tem que fazer uma CPU usando portas lógicas e depois programar ela em assembly. É o jogo que eu mais tenho tempo de gameplay na Steam. É bem legal.

1

Oi Silva, conheço sim inclusive o primeiro renderizador do meu blog era feito com base nele haha, eu desenhava no logisim e passava o arquivo pra o meu tentar desenhar e simular só usando o arquivo do Logisim, que se chama .circ também haha.

Nunca ouvi falar desse jogo mas já to apaixonado haha, muito obrigado pela dica 😊

Aliás qual era o propósito do seu projeto?

1

É que eu tenho um projeto (atualmente pausado) chamado Mya, que resumidamente é uma linguagem formal para escrever a especificação de uma ISA: https://github.com/mya-project/. Tipo Sail, só que mais simples.

Com a linguagem Mya eu consigo descrever a arquitetura do processador e o formato das instruções em código de máquina, mas não o comportamento. Então a ideia era fazer uma linguagem textual para a especificação de circuitos lógicos com o propósito de especificar o comportamento das instruções da arquitetura especificada em Mya.

Eu não fui em frente com essa ideia porque seria complexo demais e a ideia da Mya é justamente ser simples, mas até deixei um esboço de como seria a linguagem no meu Notion:

component xor(A, B) -> C {
	C = (A & ~B) | (~A & B)
}

operator "^"(A, B) = xor A, B -> C
1

Muito interessante, adorei o jeito de declarar componente. Pensei em algo parecido no circ, mas acabei dropando porque dei preferência ao import, que ia acabar dando um resultado parecido, tanto que hoje a std lib do circ é escrita em circ haha.

Outra coisa que inicialmente pensei em fazer no circ era usar uma sintaxe de operadores infixos parecida com essa, com um estilo meio inspirado no Python, mas acabei percebendo que no meu caso prefixar seria melhor lido.

Um futuro que quero adicionar no meu projeto é poder escrever testes, justamente pra chegar no ponto de ter uma ISA testada nela mesma, mesmo que seja uma ISA simples haha.

2
1

hahah pois é, essa é a ideia, eletrônica é um assunto fascinante, principalmente pra nós programadores, entender eletrônica me tornou um programador melhor em vários aspectos e é isso que quero passar com o Circ.

2

Sou da área de sistemas embarcados e achei brilhante, meus parabéns, Jefferson!
Sempre curti criações da comunidade que são voltadas pra essa área, principalmente por saber que na faculdade de engenharia muitas das ferramentas e softwares são arcaicos. No final da faculdade, quando tive a disciplina de Microeletrônica e precisei programar em VHDL, notei quanto a falta de ferramentas/materiais didáticos atualizados afeta a curva de aprendizagem (notei que você tem o nand2tetris como referência).
Ainda não bisbilhotei a linguagem, mas salvei teu blog pra acompanhar os posts e uso da linguagem.

2
2

Meus 2 cents,

Parabens pela iniciativa !

Eh sempre interessante acompanhar projetos reais usando tecnologia para resolver problemas reais.

Repositorio devidamente starreado e forkeado - obrigado por compartilhar !

Saude e Sucesso !


Este post foi favoritado via extensão TABNEWS FAVORITOS

Tem curiosidade sobre IA ? Da uma olhada no meu LIVRO: IA PARA ENGENHEIROS

1
2
2
2

Opa, Rodrigo! O circ faz a visualização do circuito eletrônico. Nesse caso, estamos tratando do fluxo de informação, e não de energia, como ocorre no circuito elétrico.

Eu tenho um post que fala sobre portas lógicas. Se tiver curiosidade, dá uma olhada lá! Tem uns widgets feitos com o Circ que ajudam bastante a entender 😊

2
2

Muito obrigado vlm e que honra haha, fique a vontade pra abrir uma issue lá no github se vc achar que algo que dá pra melhorar ou uma feature que ainda não existe 😊.

2

Muito interessante a linguagem Circ! A ideia parece ser inovadora. Há alguns meses estava pagando uma disciplina chamada Arquitetura de Computadores, com certeza se eu tivesse conhecido esse projeto antes teria me ajudado bastante haha, mas imagino que no futuro o projeto possa ajudar muita gente. Parabéns 😄

1

Imagino, eu lembro de você se esforçando pra conseguir interpretar e aprender tudo aquilo. foi essa dificuldade que me ajudou a finalizar o circ e entender realmente como aquilo ia ajudar, muito obrigado de verdade ❤️ se eu pudesse dava 1000 ups no seu comentário haha.

1
1
1
1

Meus parabéns pelo projeto e gratidão por compartilhar. Eu, como futuro engenheiro eletricista, fiquei muito empolgado com a linguagem e com certeza forkearei para testar algumas possibilidades. Vejo muito potencial nesse projeto.

1

Poxa zDarkVpp eu fico muito feliz, espero que o Circ que te ajude nessa sua jornada, e por favor vai me falando como que tá sendo o uso dele, o github tá aberto a todos que quiserem contribuir com ele. se achar algum bug sobe uma issue lá 😊.