Em ter., 23 de set. de 2025 às 21:57, Thiago Adams
<
thiago...@gmail.com> escreveu:
> Legal, desejo que a motivação continue por muito tempo!
> Tenho interesse em fazer um IR e backend, ou C89-- backend.
Sua IR vai ser SSA ou CPS? LLVM usa SSA pra IR, mas alguns projetos
acabam introduzindo uma “segunda IR” (assim como Rust mesmo[1]), e
essas “segundas IRs” não precisam ser SSA, mesmo que a IR final do
LLVM o seja. Ainda estou estudando o assunto, e gostaria de ouvir
opiniões. O que já deu pra perceber, é que uma IR intermediária assim
como Rust adota vale a pena.
> > Abrir mão de todo o ecossistema existente de software [...] você não
> > poderia expandir o software com novas ideias se você não trouxer junto
> > o capital intelectual. A grande massa de Rust não tem interesse em
> > atrair capital intelectual porque acha que a linguagem vale mais do
> > que os anos de árduo suor por trás de quem faz software.
>
> O rust usa o LLVM. daria para reescrever, mas acho que nao existe
> motivacao para isso.
Teve treta com os devs do ffmpeg também, que foi apenas mais um dos
casos do modus operandi dessa comunidade:
https://news.itsfoss.com/ffmpeg-swipe-at-rust/
Em vez de pagar ao dev que ficou anos estudando processamento de
sinais, teoria da informação, estatística, e tudo o que é necessário
pra implementar um codec, pagam um aluno de faculdade que olha pra um
código em C/C++ e reescreve em Rust sem ter a menor ideia do que o
código por trás está fazendo (seja a versão C/C++ seja a versão Rust).
E o pior é que mesmo usando o conjunto safe, você não tem nenhuma das
promessas da linguagem:
https://github.com/Speykious/cve-rs
> na minha visao tudo que pode ser mais seguro , deve ser. mas o que nao
> da para abrir
> mao eh poder fazer "unsafe " se preciso.
É como um kernel vai funcionar, por exemplo. Para alguns projetos,
unsafe é necessário. Rust na verdade acertou em permitir unsafe na
tentativa de bibliotecas que usam unsafe pra encapsular padrões safe
que o compilador não pode provar.
> > A Google está tentando lançar Carbonlang pra resolver o problema de
> > manter e ecossistema de C++ usável, porém é frustrante ver qualquer
> > entrevista com os devs de Carbonlang. Eles vão se limitar a copiar o
>
> Iniciou como um c++ diferente e nao se achou. (diferente do go, que na
> minha opniao
> tinha uma meta mais definida)
Porém há coisas boas em Carbonlang. Tô pegando tudo que é bom. Zero
necessidade de ter orgulho e rejeitar onde acertaram. A ideia de fazer
ponteiros não-nulos por padrão pra que eles se comportem como
referências e aí chamar funções que recebem referência exigirem que
você explicite o uso de uma chamada por referência elimina 99% das
complexidades de entender qual função vai ser chamada em cenário X.
Dito isso, não basta parar aí. Tem que buscar mais simplificação.
C++26 vai estar aí com reflexão, e é só o começo. Já no anúncio do
Herb Sutter divulgando que que reflexão havia sido votada pra entrar
no padrão, foi mencionado que o próximo passo é “token injection”:
>In the future we’ll also get token injection to generate C++ source right within the same source file
--
https://herbsutter.com/2025/06/21/trip-report-june-2025-iso-c-standards-meeting-sofia-bulgaria/
C++ tá ficando cada vez mais complexo. Toda versão trás novas
ferramentas de metaprogramação. Pra dominar metaprogramação em C++,
você primeiro se pergunta: em qual nível de metaprogramação vou agir?
Tem Boost.PP, Boost.VMD, Boost.MP11, Boost.Describe, Boost.Hana,
constexpr no C++23 que consegue entender meus usos de metaprogramação
sem reclamar, e reflection do C++26. E vai ter o próximo C++ depois do
26 que em algum momento vai permitir “token injection”.
Usando um design clean-slate, é possível você colapsar *todas* essas
camadas de metaprogramação em uma única camada de metaprogramação (e
inclusive ter o “token generation” que é mencionado no post do Herb
Sutter). Isso enquanto mantém o estilo de programação que já é
familiar pro código do dia-a-dia, como é o caso com constexpr. O
primeiro blog post que farei será sobre esse tema, Pratt parsers (e
higiene de macros em Lisp).
> > [...] manter uso do ecossistema legado enquanto mantém a
> > segurança do sistema como um todo [...]
>
> Nao tem como aplicar as ideias em C or C++?
Eu apliquei em Lua. Essa é uma demo que fiz pra turma com a qual tenho
me encontrado pra discutir segurança:
https://www.youtube.com/watch?v=anu-onpDMBc
Também dá pra aplicar em C/C++, mas se estou fazendo uma linguagem pra
ser compatível com C/C++ (assim como Carbonlang), o ecossistema já não
está garantido? Apesar de ter feito muito, não consegui aplicar ainda
tudo que eu queria porque eu não tinha controle sobre a implementação
de Lualang. Controlar o tooling te dá liberdade pra fazer mais coisas.
Pra dar exemplos concretos, essas são duas mudanças que pedi pro povo
da glibc e do FreeBSD:
*
https://sourceware.org/bugzilla/show_bug.cgi?id=32509
*
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=283528
Sem essas mudanças, fica muito difícil fazer código “C/C++ portável”
que implemente camadas de compatibilidade pra código antigo (que não
foi escrito pensado em capabilities) rodar dentro de sandboxes de
capabilities. Se eu faço código pra linking dinâmico, falha caso a
pessoa use linking estático (e vice-versa). Bolei umas gambiarras, mas
há limites. A solução (em C/C++), é escrever código *fora* de C/C++
(isto é, scripts de linking, por ex.). E isso é muito básico. Dá pra
fazer coisa *muito* mais interessante do que já consegui fazer até
então, mas só se a gente partir pra ter controle do tooling (por ex.
em uma linguagem nova, mesmo a linguagem nova seja compatível com o
ecossistema de C/C++).
Teve um bug que encontrei na libstdc++ e na libc++. Correção: mover a
ordem de duas linhas. Situação do LLVM: corrigiram na mesma semana.
Situação do GCC: anos e anos e nada de aplicar minha patch. Deferir
tudo pros mantenedores dos projetos open source mais acima cria esse
tipo de fricção e atrasa demais uma solução.
> Olhando pelo site achei bem difícil entender o projeto.
> Nao parece ser uma linguagem não achei a descrição classica esperada
> de uma linguagem com exemplos.
Vou trabalhar nisso depois que estiver gerando executáveis úteis. O
projeto tá em bem early stage, e estou explicando aqui antes de outros
cantos. Próximo mês mando outro email pra cá avisando do progresso.