3 pontos por GN⁺ 2024-10-25 | 1 comentários | Compartilhar no WhatsApp
  • Pretty C é uma nova linguagem de script compatível com C, oferecendo recursos como tipagem dinâmica, iteração genérica e rastreamento de recursos
  • Mantém compatibilidade retroativa com C e todas as bibliotecas
  • Foi inspirada em Lua, Python, JavaScript e Lisp.

Objetivos

  • Oferecer muito açúcar sintático para desenvolvedores C, tornando a linguagem mais fácil de usar.
  • Se posicionar como a linguagem de script definitiva, capaz de substituir várias linguagens como Lua, Python, JavaScript e Ruby.
  • Transformar qualquer base de código em algo amigável para iniciantes incluindo apenas um único arquivo de cabeçalho.

Primeiros passos

  • É possível clonar o repositório no GitHub ou copiar o arquivo pretty.h para usar.

Recursos de conveniência oferecidos

Cabeçalhos padrão incluídos

  • stdbool.h fornece true, false e bool
  • stdint.h fornece tipos inteiros de largura fixa
  • iso646.h fornece alternativas de operadores com melhor legibilidade

Macros simples

  • Fornece macros como max, min, len, default, limit, between, divisible etc.

Novos tipos

  • Fornece aliases de tipos como string, byte, bytes, any etc.
  • Fornece formas abreviadas de inteiros como uchar, ushort, uint, ulong etc.

Novos aliases

  • Fornece aliases de operadores como eq, is, bitnot, bitxor etc.
  • Fornece operadores de comparação como below, above, upto, downto etc.
  • Fornece predicados numéricos/de dados como even, odd, positive, negative, zero, empty etc.
  • Fornece aliases como nil, until, elif, ifnt, repeat, done~/~finish, pass etc.

Inferência de tipos (GCC, Clang ou C23+)

  • É possível usar inferência de tipos com as palavras-chave var, let, local

Saída genérica (C11+)

  • print e println permitem exibir dados de vários tipos

Igualdade genérica (C11+)

  • equal permite comparar dados de vários tipos

Operador ternário elegante

  • É possível usar um operador ternário mais legível com palavras-chave como when, then, other, otherwise, only, otherwhen

Macro for

  • Macros como foreach, forthese, fortimes, forrange, forrangeby oferecem vários padrões de repetição

Macros de alocação

  • Macros como new, vector, delete permitem alocação e liberação simples de memória

Utilitários de bloco

  • Fornece utilitários de bloco como lambda, with, defer, try, catch

Resumo do GN⁺

Pretty C é um projeto que adiciona vários açúcares sintáticos à linguagem C para ajudar desenvolvedores a escrever código com mais facilidade. Em especial, mantém compatibilidade retroativa com C ao mesmo tempo em que oferece vários recursos inspirados em linguagens como Lua, Python e JavaScript. Esses recursos podem ajudar desenvolvedores C a escrever código mais conciso e legível. Projetos com funcionalidades semelhantes incluem Zig e Nim.

1 comentários

 
GN⁺ 2024-10-25
Comentários no Hacker News
  • Há uma longa tradição de criar DSLs dentro de C. Stephen Bourne quis escrever o shell de forma semelhante a ALGOL usando o pré-processador de C
  • Não está claro se isso é uma piada ou se o autor está confuso. Não é scripting, e afirma introduzir tipagem forte, mas na prática não faz nada em relação a tipos. Introduz apelidos de operadores supostamente inspirados em Lua e Lisp, mas eles não existem em nenhuma das duas linguagens
  • Afirma ser uma linguagem de scripting, mas é preciso compilar o programa. Se adicionar CINT, dá para ter execução imediata e um REPL
  • Oferece açúcar sintático suficiente para causar um infarto diabético em desenvolvedores C. Divertido
  • Comete o mesmo erro do Python 2. Strings e bytes não são o mesmo tipo e não devem ser tratados assim
  • Se isso parece interessante, você provavelmente também vai gostar de libcello.h
  • Lembro de ter inspecionado uma base de código C++ que parecia ter sido escrita em Java. Tudo tinha nomes em camelCase, havia getter e setter para todas as variáveis de classe, e interfaces por toda parte
  • Há algumas coisas para adicionar ao CNoEvil e ao ogw. Parece que sempre aparece mais coisa cada vez que esse projeto ressurge a cada poucos meses
  • "unless" é mais legível do que "ifnt"
  • Fico me perguntando se daria para tecer o Readme em pretty.h. Se os blocos de código do arquivo org são abrangentes. Gostei da forma como o raciocínio foi explicado no Readme