Pow massa demais, o que mais gosto muito desses "transpiladores", por que reaproveita coisa demais da linguagem de back.
Sobre essa macro AST, me dá um exemplo não entendi muito bem, é macro tipo C(usando dfine)?
E vlw demais por me seguir...
Pow massa demais, o que mais gosto muito desses "transpiladores", por que reaproveita coisa demais da linguagem de back.
Sobre essa macro AST, me dá um exemplo não entendi muito bem, é macro tipo C(usando dfine)?
E vlw demais por me seguir...
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"
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
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
#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 😅
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!
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 😅