Executando verificação de segurança...
1

Primeiro, quero esclarecer que a mensagem "Quando sua linguagem escrever macros usando AST a gente conversa" foi só uma piada. Lendo de novo está me soando meio passivo-agressivo kkkkk

Então, existem dois tipos de "macros"

Templates

referencia

aqui é bem estilo do define do C, parafraseando os docs

Templates are a simple substitution mechanism that operates on Nim's abstract syntax trees


They integrate well with the rest of the language and share none of C's preprocessor macros flaws

template `!=` (a, b: untyped): untyped =
  # this definition exists in the System module
  not (a == b)

assert(5 != 6) # the compiler rewrites that to: assert(not (5 == 6))

Obs: sobre o `!=`, Nim pode criar operadores assim, mas se removesse os ` e colocasse um nome valido, teria mais cara de função

macros

Esse é o que usa AST. ela é estilo uma função que recebe a AST de um bloco, e retorna uma nova, nem eu entendo mais a fundo como ela funciona, mas é basicamente isso. Recomendo que veja exemplos aqui

E isso permite umas coisas muito legais na linguagem, por exemplo

  • nimsl | uma biblioteca que permite transformar diretamente código Nim em GLSL (linguagem que roda na GPU)
  • wxnim | biblioteca de GUI que uma uma macro para ter uma criação de interfaces mais declarativas
#exemplo wxnim, que é código valido em nim
Panel | Boxsizer(orient = wxHorizontal):
  StaticBox(label = "Basic controls") | StaticBoxSizer(orient = wxVertical):
    Button: "Click me!"
    CheckBox: "Check me!"

Para finalizar, leve tudo isso com um grão de açucar, eu não fiz muito mais que um hello world até então 😅

Carregando publicação patrocinada...
1

Fica tranquilo bicho, entendi a piada, 'kkkkkkkk
Agora, deixa te contar isso é quase como generics pra mim, levou um tempo para entender o funcionamento, mas depois foi lindo 🥹

Vou estudar o nim, porque gostei da forma de criar um operador, algo que poucas linguages tem!

1

Ela ainda tem como fazer operadores de prefixo, então um #variavel pode retornar o tamanho dela, igual um Length Operator.

Mas o Nim é uma linguagem que eu achei muito dahora, só preciso de um bom motivo para aprender ela, por que hoje em dia parece ser muito mais fácil fazer tudo em js mesmo 😅